如何区分Django自动创建ManyToMany直通模型和手动定义的?

时间:2010-02-10 16:33:17

标签: python django django-models many-to-many

假设我们有模特:

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')

在此之后,我们可以通过

访问直通模型

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

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

问题:

如果指定了AutomaticModelManualModel(或其“others”字段),如何确定直通模型是自动创建还是手动创建。

当然,除了测试名称但它不适合一般情况之外 - 同时检查models.py的内容似乎也有点容易出错。实际字段“__dict__或其他任何地方似乎都没有。

任何线索?

1 个答案:

答案 0 :(得分:2)

嗯,南方开发者似乎知道它:模型是自动生成的,如果

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

哇噢!