如何区分Django自动创建的ManyToMany通过模型和手动定义的模型?
假设我们有一些模型:
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__
或其他地方似乎没有相关信息。
有没有什么线索呢?
1 个回答
2
好吧,南方的开发者似乎知道这一点:如果满足某些条件,模型会自动生成。
# Django 1.0/1.1
(not field.rel.through)
or
# Django 1.2+
getattr(getattr(field.rel.through, "_meta", None), "auto_created", False)
太棒了!