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

2 投票
1 回答
593 浏览
提问于 2025-04-15 19:07

假设我们有一些模型:

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 个回答

2

好吧,南方的开发者似乎知道这一点:如果满足某些条件,模型会自动生成。

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

太棒了!

撰写回答