Existe-t-il un moyen de faire une seule requête d'une super classe puis d'obtenir une liste de toutes les sous-classes respectives dans django?[dupliquer]

StackOverflow https://stackoverflow.com//questions/9674046

Question

Duplicata Possible:
Interroger l'héritage du modèle Django sur une table centrale

En suivant les documents officiels trouvés ici
https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance

Je vois que je peux interroger l'endroit qui est un Super Restaurant via

p = Place.objects.filter(name="Bob's Cafe")

Donc, à ce stade, existe-t-il un moyen de vérifier et de voir si les objets retournés sont également de type sous-classe Restaurant et si oui, d'accéder à leurs champs de sous-classe?

Pour le moment, tout ce que je peux dire, c'est que tous les objets renvoyés sont de classe Place et que leurs propriétés et méthodes de sous-classe ne sont pas disponibles car l'objet n'est pas converti en sous-classe.

Si cette méthodologie n'est pas possible, quelle est la meilleure pratique pour essayer d'abstraire une super classe et de minimiser la surcharge des requêtes lorsque vous essayez d'obtenir une liste contenant tous les modèles de sous-classes?Je comprends en théorie que je pourrais faire une requête de chaque sous-classe puis combiner la liste ensemble, mais je devrais alors en faire plus si je voulais ordonner cette liste par exemple une date.

Était-ce utile?

La solution

Donc, à ce stade, existe-t-il un moyen de vérifier et de voir si les objets retournés sont également de type sous-classe Restaurant et si oui, d'accéder à leurs champs de sous-classe?

Si vous avez interrogé le modèle de lieu, les objets renvoyés sont des instances de lieu qui n'ont aucune connaissance des sous-classes associées à MTI.Vous devez fournir un champ sur la superclasse pour créer un lien descendant vers la sous-classe.Voir Rendre générique une conception d'héritage multi-tables dans Django

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top