Comment pouvez-vous vérifier le type d'un terrain à plusieurs à plusieurs dans Django?
Je voulais le faire de cette façon: p> ceci ne " t Travailler, car la classe Pourquoi est-ce que cela fait référence à une classe qui Ne semble pas exister et comment puis-je le faire fonctionner? P> Merci beaucoup pour votre aide. P> P> PlusieursRelatedManager Code> est introuvable.
Mais si je fais
champ .__ classe __ code> la sortie est
django.db.models.fields.db.models.fields.related.manyrelatedManager code> p>
4 Réponses :
Vous devriez être capable de vérifier comme une chaîne.
field.__class__.__name__ == 'ManyRelatedManager'
Merci pour la réponse rapide! Mais n'est-ce pas un petit peu dedynamique? En fait, je ne pense pas que la classe "MétéorélatedManager" sera jamais renommée, mais n'est-ce pas un peu négligé? Mais cependant, je pense que je vais utiliser cette réponse, car il est plus performant que celui de Lazerscience. Merci!
Je ne suis pas tout à fait sûr de ce que vous essayez d'atteindre, mais je suppose que vous devriez mieux regarder l'attribut Vous pouvez faire quelque chose comme: p> _meta code> de votre modèle pour déterminer la classe de terrain!
Décédez
_meta.fields code> et
_meta.many_to_many code>!
field_class = [f for f in yourmodel._meta.many_to_many if f.name=='yourfield'][0].__class__
Si vous avez déjà l'instance de champ, vous pouvez simplement faire:
>>> print fm <class 'django.db.models.fields.related.ManyRelatedManager'> >>> print fm.instance._meta.get_field_by_name('fieldnamehere') (<django.db.models.fields.related.ForeignKey: fieldnamehere>, None, True, False)
Ce serait la voie parfaite, mais je ne sais pas comment obtenir l'instance de terrain d'un domaine à plusieurs à plusieurs, située au modèle cible. Si vous pouviez m'aider avec cela, je ' ll accompt votre réponse :)
Je peux répertorier tous les champs avec objet._meta.get_all_field_names () code> mais le nom de terrain correspondant n'est pas accessible via
objet._meta.get_field ("FieldName") code>. Je peux utiliser la fonction
objet._metta.get_field__meta.get_field_by_name ('' FieldName ') code> qui met
(
obtenu :) .. c'est: objet._meta.get_field_by_name ("Nom de terrain") [0] .field code>
(Utilisation de Django 1.11)
Cette question est devenue déroutante, car le comportement signalé n'est pas le comportement moderne d'un domaine connexe. Exemple ici, où Est-il différent si nous inspections le no. P> Voici quand j'insère Je pense que le scénario le plus probable de quelqu'un vient ici. Vous avez ceci: p> note, c'est ce que l'OP avait. P> Je stipule que le modèle associé est jobtemplate code> est la classe de modèle et
Les informations d'identification code> est un champ associé à plusieurs à plusieurs: p>
_méta code> d'un objet? P>
Critique code >. Je peux vérifier s'il s'agit d'un gestionnaire de créditifs associé! P>
>>> isinstance(JobTemplate.objects.first().credentials, Credential.objects.__class__)
True