它可能非常基础,但我开始学习Django REST Framework。到目前为止,我已经成功进行了只读操作。现在我陷入了这个问题。
我有一个模特:
class PersonComment(AbstractComment):
person = models.ForeignKey(Person, on_delete=models.PROTECT)
author = models.ForeignKey('auth.User')
body = models.TextField(default='', blank=False)
(此处作者是评论的作者,此人是该评论所涉及的人;它是一个家谱网站。)和相关的序列化作者:
class PersonCommentSerialiser(serializers.HyperlinkedModelSerializer):
class Meta:
model = PersonComment
fields = ('url', 'body', 'person', 'author')
在我的HTML页面中,我希望用户通过提供" body"来提交评论,其余的应该自动填写。填写"作者&#34 ;?的最佳做法是什么?在我的DRF之前的Django练习中,我在视图中做了类似的事情:
comment = PersonComment.objects.create(
author=request.user,
body=new_comment_body,
person=person
)
但如果我理解到目前为止我所读过的所有内容,那么这不是DRF中的方式。非常感谢任何帮助。
答案 0 :(得分:1)
我会使用序列化程序字段中的default属性来执行此操作。
class PersonCommentSerialiser(serializers.HyperlinkedModelSerializer):
author = serializers.PrimaryKeyRelatedField(read_only=True, default=CurrentUserDefault())
class Meta:
model = PersonComment
fields = ('url', 'body', 'person', 'author')
CurrentUserDefault是Django REST框架中预定义的类,正是出于此目的。这样您就不必在自己的序列化程序中覆盖create。
我不确定person
和author
之间的区别。但是你应该能够做一些类似的事情。