Django Clé Étrangère: obtenir un modèle associé?
Est-il possible d'obtenir le modèle d'une clé étrangère à travers le champ de clé étrangère elle-même?
Par exemple, si j'ai 3 modèles:
class ModelA(models.Model)
field1 = models.CharField(max_length=10)
class ModelB(models.Model)
field1 = models.CharField(max_length=10)
class ModelC(models.Model)
field1 = models.CharField(max_length=10)
field2 = models.ForeignKey(ModelA)
field3 = models.ForeignKey(ModelB)
et je veux faire:
for field in ModelC._meta.fields:
if field.get_internal_type() == "ForeignKey":
#get the related model for field e.g. ModelA or ModelB
Est-ce possible en utilisant seulement les modèles eux-mêmes plutôt que sur les instances de ces modèles?
Vous devez vous connecter pour publier un commentaire.
Si ModelA a un FK champ nommé "toto", alors c'est comment vous pouvez obtenir le modèle associé:
Avec votre code, il ressemblerait à:
Si trouvé par l'aide de la saisie semi-automatique dans la coque il y a longtemps, il fonctionne toujours. Vous pourriez apprendre à utiliser le shell pour désosser des trucs comme ça.
ModelA._meta.get_field('foo').related_model
. J'ai trouver cela en tapant "tab" pour l'auto-complétion dans la ligne de commande.Lorsque vous essayez d'extraire des relations de ce genre, j'utilise beaucoup de ligne de commande de l'expérimentation. Un modèle commun que j'utilise est
_=starting_point.<chained_attributes>;pprint((_, dir(_)))
. Par exemple:(Vous aurez besoin de faire
from pprint import pprint
d'abord, naturellement.) Qui me permet d'expérimenter avec l'ajout /suppression d'attributs jusqu'à trouver l'article que je veux... tout voir clairement ce que j'ai et ce qui est disponible à la prochaine niveau de. À partir de cela, je reçoisModelC.field2.field.rel.to == ModelA
. Le même modèle peut être utilisé pour explorer inverse relations, plusieurs-à-plusieurs relations, en commençant par une instance plutôt qu'à la classe, etc.