定义默认子项(反向ForeignKey)

时间:2011-08-28 06:42:59

标签: django django-models django-admin

我有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。

1 个答案:

答案 0 :(得分:0)

如果Foo可以有多个Bars,那么Bar可以属于多个Foos吗?如果是这样,那么您可以使用ManyToManyFieldthrough参数轻松解决此问题,如下所示:

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文档。

就像注释一样,发布您实际问题的简单版本(即说PersonGroupFooBar)有助于我们更好地了解您实际想要建模的内容!这样就可以更容易地看到人际关系的实际位置。