问题描述
我试图了解如何在Django ReST Framework(DRF)应用程序中将API资源与关系数据库模型最好地分离。
一个小例子:考虑一个博客帖子模型,其中每个帖子都可以使用一个或多个标签进行标记:
class Post(models.Model):
text = models.TextField(...)
tags = models.ManyToManyField(Tag,related_name='tags')
class Tag(models.Model):
tagname = models.CharField(...)
由于Django ORM遵循Active Record模式,因此每个表都有一个模型。但是,我不想在我的ReST API上公开关系数据库模型。相反,我想提供更大的复合资源。在这里的简单示例中,我想展示一个嵌入标签的/post/<post:id>
资源。例如,作为列表。
我已经看到可以使用Post
在序列化器中加入Tags
和SerializerMethodField()
。这对我来说似乎不对,因为序列化程序的工作应该是将转换资源仅转换为请求的内容类型。
我可以通过跨越关系的查找将两个模型加入视图中。但是之后,我可能需要编写一个自定义的序列化程序,而我再也无法使用方便的视图集了。
因此,我想我正在寻找的是将模型加入一个复合的“虚拟”模型中,该模型在DB关系上没有一对一的映射,但是可以通过现有的视图和序列化器传递。在某种程度上,这将更接近域模型而不是活动记录模式。
免责声明:我是Django和Active-Record ORM的新手。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)