9
votes

Publier une relation une à plusieurs

J'essaie d'exposer une API à mon modèle Django à travers le cadre de repos Django.

J'ai un objet Observation . Une observation peut contenir plusieurs choses qui ont été observées. Donc, je l'ai représenté comme ceci: xxx

si je comprends, c'est une relation unique.

J'ai maintenant une vue d'API: < / p> xxx

et le sérialisateur correspondant: xxx

Que dois-je faire pour pouvoir poster une observation avec plusieurs choses détectée? Je ne peux pas comprendre. Merci beaucoup.


0 commentaires

3 Réponses :


1
votes
thing = models.ManyToManyField('Thing')
you need to use many to many relationship for creating a temporary table that will store the keys and associate data automatically.

1 commentaires

Merci, mais ma table intermédiaire est le observé un. Le BalentTomanAnfield ne fonctionne que si vous n'avez aucune autre information attachée à la relation. Ce que je peux faire, c'est avoir chose = modèles.manytomanfield (chose, via = 'Observez-vous') , mais cela ne résout toujours pas mon problème d'origine.



8
votes

(Réponse plus ou moins copiée d'un autre Question similaire mais moins claire )

Pour créer plusieurs objets associés dans un seul post nécessite Serializers imbriqués en écriture qui ne sont pas encore disponibles.

Le support est un Travailler en cours , mais dans le temps moyen ( hacky) solution consiste à remplacer la méthode créer dans la vue dans chaque cas: xxx

probablement pas idéal, mais cela fonctionne pour moi jusqu'à ce que le bon chemin vient.

L'autre option consiste à créer les objets d'observation d'observation associés individuellement avec des messages séparés et d'utiliser Primarykeyrelatedfield ou hyperlinkedRélatedfield Pour rendre les associations dans la finale Observez-la poste.


1 commentaires

Aha, c'est ce que je cherchais. Merci beaucoup, réponse acceptée.



5
votes

Je sais que ce fil a déjà une réponse, mais j'ai commencé à travailler pour résoudre ce problème et que ce poste était l'une de mes inspirations, je voudrais partager ma solution finale. Cela peut être utile à quelqu'un. J'ai les modèles, donc la classe des parents: xxx pré>

puis, la classe enfant: p> xxx pré>

Je devais définir les sérialistes, car Je ne voulais pas créer une URL accessible au routeur pour gérer directement des objets pour enfants, mais je voulais les créer via le modèleViewset de la société mère de modèle, c'est ce dont j'avais besoin: p>

router = routers.DefaultRouter()
router.register(r'parents', ParentViewSet)


1 commentaires

Merci pour la réponse, mais vous utilisez un Modelviewset ici, je pense que cela aurait été plus frais lorsque vous avez utilisé une vue générique .