2017-09-17 3 views
0

C'est probablement très basique, mais je commence à apprendre le framework Django REST. Jusqu'à présent, j'ai réussi avec des opérations en lecture seule. Et maintenant je me suis coincé sur ce problème.Attacher l'auteur à la requête POST pour créer un objet

J'ai un modèle:

class PersonComment(AbstractComment): 
    person = models.ForeignKey(Person, on_delete=models.PROTECT) 
    author = models.ForeignKey('auth.User') 
    body = models.TextField(default='', blank=False) 

(Ici, l'auteur est l'auteur du commentaire et personne est une personne ce commentaire concerne, c'est un site généalogique.) Et un sérialiseur connexe:

class PersonCommentSerialiser(serializers.HyperlinkedModelSerializer): 

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

Dans ma page HTML, je m'attends à ce qu'un utilisateur soumette un commentaire en fournissant "body", le reste devrait être automatiquement rempli. Quelle est la meilleure pratique pour remplir "l'auteur"? Dans mes exercices pré-DRF Django, je faisais quelque chose comme ça dans la vue:

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

Mais si je comprends tout ce que je l'ai lu jusqu'à présent, ce n'est pas la façon DRF. Toute aide est très appréciée.

Répondre

1

Je le ferais en utilisant l'attribut default dans les champs du sérialiseur.

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

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

CurrentUserDefault est une classe prédéfinie dans framework Django REST exactement dans ce but. De cette façon, vous ne devez pas écraser créer dans votre propre sérialiseur. Je ne savais pas quelle est la différence entre person et author. Mais vous devriez être capable de faire quelque chose de similaire, je suppose.