J'ai un commentaire de modèle qui peut aller sur Projet ou Tâche.Django Rest Framework Relations génériques et ViewSets
class Comment(BaseCommentModel):
author = models.ForeignKey(settings.AUTH_USER_MODEL)
content_type = models.ForeignKey(
ContentType,
verbose_name=_('content type'),
related_name="contenttype_set_for_%(class)s"
)
object_pk = models.TextField(_('object ID'))
content_object = GenericForeignKey(ct_field="content_type", fk_field="object_pk")
projet et des tâches ont le terrain mis en place comme:
comments = GenericRelation(Comment)
Les commentaires peuvent être créés sur des projets ou des tâches afin qu'il devrait y avoir un viewset pour chacun:
class ProjectCommentViewSet(viewsets.ViewSet):
class TaskCommentViewSet(viewsets.ViewSet):
Et ceux-ci afficheront les commentaires liés à chaque modèle.
Mais ce que je ne comprends pas:
Comment puis-je configurer la création/mise à jour/supprimer dans un viewset pour le modèle Commentaire afin que le commentaire est créé avec la relation correcte?
Comment puis-je filtrer dans les vues pour afficher les commentaires liés à ce modèle? Je ne peux pas utiliser select_related car le commentaire n'a pas de champ Projet ou Tâche.
Comment écrire les
HyperlinkedModelSerializer
s pour ces relations? Dois-je ajouter unHyperlinkedIdentityField
à CommentSerializer(), puisHyperlinkedRelatedField
à l'utilisateur, au projet et aux sérialiseurs de tâches? Ou comment puis-je configurer cela?
Merci pour toute aide fournie, je pourrais vraiment utiliser une certaine direction ici.
Je n'arrive pas à comprendre comment les relations sur les modèles se traduisent par les sérialiseurs et les vues. Et aussi comment gérer les relations lors de l'utilisation de relations génériques.
Est-ce que je dois définir des champs pour content_type object_id et content_object dans le commentaire sérialiseur? – shenk
Non, ceux-ci ne sont nécessaires que dans la définition 'model'. –