所以,我有这个模型:
class Article(models.Model):
user = models.ForeignKey('User', null=True) # Allow anonymous articles
url = models.CharField(max_length=255)
date = models.DateTimeField()
status = models.CharField(max_length=255)
这个序列化器:
class ArticleSerializer(serializers.modelSerializer):
class Meta:
model = Article
fields = ('user', 'date', 'status')
depth = 2
使用此视图集:
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all(=
serializer_class = ArticleSerializer
因此,我在一个请求中获得与用户相关的所有内容。 问题是,如果我想添加一篇文章,我现在必须添加一大堆嵌套的json。我只想通过id引用用户并完成它。
像:
{
"user": 1, // Or even null
"url": "http://test.tld",
"date": now,
"status": "published"
}
我是如何实现这一目标的?我想我只需要另一个串行器来编写数据?如何将所有这些绑定在一起?
如果我想像这样POST JSON,我会收到错误说" Non-Field-Errors"因为"客户"还有一些关系,因为"深度"他们也需要被填补。但我想提供一个客户ID并完成它。
答案 0 :(得分:1)
您可以在DRF中使用属性,它应该执行您要执行的操作
class Article(models.Model):
_user = models.ForeignKey('User', null=True, db_column="user_id") # Allow anonymous articles
url = models.CharField(max_length=255)
date = models.DateTimeField()
status = models.CharField(max_length=255)
@property
def user(self):
return self._user
@user.setter
def user(self,value):
self._user = User.objects.get(id=value)
然后在序列化器上
class ArticleSerializer(serializers.modelSerializer):
user = serializers.Field(source='user')
class Meta:
model = Article
fields = ('user', 'date', 'status')
depth = 2
在您阅读JSON时将返回用户对象,您可以修改@property以获得所需内容