首先让我说我正在使用旧数据库,因此避免自定义中间表不是一种选择。
我正在寻找一种替代方法来获得该limit_choices_to
功能,因为我只需要在我的 ModelForm 中显示由模型中的sample_option
布尔值标记的选项:Sampletype
class PlanetForm(ModelForm):
class Meta:
model = Planet
fields = ['name', 'samples']
这是我的模型的简化视图
class Planet(models.Model):
name= models.CharField(unique=True, max_length=256)
samples = models.ManyToManyField('Sampletype', through='Sample')
class Sample(models.Model):
planet = models.ForeignKey(Planet, models.DO_NOTHING)
sampletype = models.ForeignKey('Sampletype', models.DO_NOTHING)
class Sampletype(models.Model):
name = models.CharField(unique=True, max_length=256)
sample_option = models.BooleanField(default=True)
Sample
是中间表。通常,如果项目首先使用 Django 启动,我可以将 ManyToManyField 声明定义为:
samples = models.ManyToManyField('Sampletype', limit_choices_to={'sample_option'=True})
但这不是一个选择。那么我该如何获得这个功能呢?Django 在他们的文档中明确指出:
在使用 through 参数指定的自定义中间表的 ManyToManyField 上使用时,limit_choices_to 无效。
但是,当您确实有自定义中间表时,它们没有提供有关如何实现该限制的信息。
我尝试在模型中设置limit_choices_to
选项,如下所示:ForeignKey
Sample
sampletype = models.ForeignKey('Sampletype', models.DO_NOTHING, limit_choices_to={'sample_option': True})
但这没有任何效果。
奇怪的是,我在网上找不到这个问题的答案,显然其他人必须在他们的项目中这样做,所以我猜测解决方案非常简单,但我无法弄清楚。
提前感谢您的任何帮助或建议。