Прикрепить автора к запросу 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
, Но вы должны быть в состоянии сделать что-то подобное, я полагаю.