2010-02-10 5 views
2

Disons que nous avons des modèles:Comment distendingish entre ManyToMany through-models automatiquement créés par Django et définis manuellement?

from django.db import models 

class AutomaticModel(models.Model): 
    others = models.ManyToManyField('OtherModel') 

class ManualModel(models.Model): 
    others = models.ManyToManyField('OtherModel', through='ThroughModel') 

class OtherModel(models.Model): 
    pass 

class ThroughModel(models.Model): 
    pblm = models.ForeignKey('ManualModel') 
    other = models.ForeignKey('OtherModel') 

Après cela, nous pouvons accéder au travers des modèles via

AutomaticModel._meta.get_field('others').rel.through et

ManualModel._meta.get_field('others').rel.through 

Problème:

Si on leur donne l'une des AutomaticModel ou ManualModel (ou leurs champs 'others'), comment déterminer, si le -model a été créé automatiquement ou manuellement.

Bien sûr, sauf pour tester les noms, mais cela ne correspond pas au cas général - également vérifier le contenu de models.py semble également un peu sujet aux erreurs. Et il semble qu'il n'y ait rien dans les champs __dict__ ou ailleurs.

Des indices?

Répondre

2

Eh bien, les développeurs du Sud semblait savoir: le modèle est généré automatiquement si

# Django 1.0/1.1 
(not field.rel.through) 
or 
# Django 1.2+ 
getattr(getattr(field.rel.through, "_meta", None), "auto_created", False) 

Woohoo!

Questions connexes