我有2个型号Foo和Bar。每个Foo都有多个Bars,但其中一个需要是“默认”。此时我在Bar中有一个指向Foo的外键,但现在我需要一种方法来指定哪个Bar属于Foo是默认值。我尝试在Foo中设置另一个指向一个Bar(具有唯一的related_name)的外键,但是我得到了各种错误(包括在django-admin模板中)。
到目前为止代码:
class Foo(models.Model):
default_bar = models.ForeignKey('Bar')
class Bar(models.Model):
foo = models.ForeignKey(Foo)
我对一个全新的解决方案绝对没问题,因为我可能做错了。我能想到的唯一另一种方法是有一个单独的表连接Foos和Bars并使Foo部分唯一,但这使管理界面成为MESS。
答案 0 :(得分:0)
如果Foo可以有多个Bars,那么Bar可以属于多个Foos吗?如果是这样,那么您可以使用ManyToManyField
和through
参数轻松解决此问题,如下所示:
class Foo(models.Model):
name = models.CharField(max_length=128)
bars = models.ManyToManyField(Bar, through='FooBar')
class Bar(models.Model):
name = models.CharField(max_length=128)
class FooBar(models.Model):
foo = models.ForeignKey(Foo)
bar = models.ForeignKey(Bar)
is_default = models.BooleanField()
检查"Extra fields on many-to-many relationships"上的Django文档。
就像注释一样,发布您实际问题的简单版本(即说Person
和Group
与Foo
和Bar
)有助于我们更好地了解您实际想要建模的内容!这样就可以更容易地看到人际关系的实际位置。