Прикрепить автора к запросу POST для создания объекта

Вероятно, это очень просто, но я начинаю изучать 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-странице я ожидаю, что пользователь отправит комментарий, указав "тело", остальное должно быть заполнено автоматически. Как лучше всего заполнять "автор"? В моих упражнениях перед DRF Django я делал что-то вроде этого в представлении:

comment = PersonComment.objects.create(
    author=request.user,
    body=new_comment_body,
    person=person
)

Но если я понимаю все, что я прочитал до сих пор, это не так в DRF. Буду признателен за любую оказанную помощь.

1 ответ

Я бы сделал это, используя атрибут по умолчанию в полях сериализатора.

class PersonCommentSerialiser(serializers.HyperlinkedModelSerializer):
    author = serializers.PrimaryKeyRelatedField(read_only=True, default=CurrentUserDefault())

    class Meta:
        model = PersonComment
        fields = ('url', 'body', 'person', 'author')

CurrentUserDefault - класс, предопределенный в инфраструктуре REST Django именно для этой цели. Таким образом, вам не нужно перезаписывать create в вашем собственном сериализаторе.

Я не был уверен, в чем разница person а также author, Но вы должны быть в состоянии сделать что-то подобное, я полагаю.

Другие вопросы по тегам