假设我们有模特:
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
问题:
如果指定了AutomaticModel
或ManualModel
(或其“others
”字段),如何确定直通模型是自动创建还是手动创建。
当然,除了测试名称但它不适合一般情况之外 - 同时检查models.py的内容似乎也有点容易出错。实际字段“__dict__
或其他任何地方似乎都没有。
任何线索?
答案 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)
哇噢!