将作者附加到POST请求以创建对象

时间:2017-09-17 21:05:23

标签: django-rest-framework

它可能非常基础,但我开始学习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中的方式。非常感谢任何帮助。

1 个答案:

答案 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。

我不确定personauthor之间的区别。但是你应该能够做一些类似的事情。