如何使用Django ReST Framework将复合模型映射到单个资源上?

问题描述

我试图了解如何在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在序列化器中加入TagsSerializerMethodField()。这对我来说似乎不对,因为序列化程序的工作应该是将转换资源仅转换为请求的内容类型。 我可以通过跨越关系的查找将两个模型加入视图中。但是之后,我可能需要编写一个自定义的序列化程序,而我再也无法使用方便的视图集了。 因此,我想我正在寻找的是将模型加入一个复合的“虚拟”模型中,该模型在DB关系上没有一对一的映射,但是可以通过现有的视图和序列化器传递。在某种程度上,这将更接近域模型而不是活动记录模式。

这种方法似乎明智吗?可行?还是有更好的方法解决问题?

免责声明:我是Django和Active-Record ORM的新手。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...