Django:维护单独的对象集,几乎就像'儿童'

时间:2010-12-05 15:56:45

标签: django django-models django-admin

我目前正在掌握Django中的一些细节,我开始认真使用它。我有一个例子,我有一些外键关系,我想保持对象分开。这是一个快速的models.py示例:

class CopyOfBook(models.Model):
    barcode = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    copies = models.ManyToManyField(CopyOfBook)

class Library(models.Model):
    name = models.CharField(max_length=100)
    books = models.ManyToManyField(Book)

每个组件都依赖于其父组件 - 例如,图书不能存在于图书馆之外,并且特定于单个图书馆。我知道这是一个有点人为的例子,但是在Django中建模的最好方法是什么?

问题是,如果你打开了管理员并添加了一本新书,你会看到所有CopyOfBook实例的列表,而不仅仅是属于那本书的那些(在添加新书时) ,将是一个空列表。)

希望我已经清楚地解释了这一点,如果您需要任何澄清,请告诉我。

更新:我一直在尝试使用ManyToMany.limit_choices_to,并在参数中使用适当的related_name,但没有太大的乐趣。

3 个答案:

答案 0 :(得分:1)

您应该首先考虑您的实体关系模型。

CopyOfBook有一本Book和一个Library。所以你可以给每个人一个ForeignKey。

Book and Library只能通过CopyOfBook连接。因此,虽然这不是绝对必要的(上面两个上面的ForeignKey就足够了),你可以通过= CopyOfBook给Book一个ManyToMany关系Book。

答案 1 :(得分:0)

如果图书特定于SINGLE图书馆,您应该在图书馆中放置ForeignKey,而不是ManyToManyField中的Library。此外,我认为CopyOfBook也将特定于一本书,所以这同样适用于此!

然后,您可以通过InlineModelAdmins管理图书和副本!

答案 2 :(得分:0)

ManyToManyLibrary之间的Book关系很好,因为多个图书馆可以拥有相同的图书。但是,ManyToManyBook之间的CopyOfBook关系对我没有意义。特定副本可以是特定书籍。你应该拥有的是many-to-one (ForeignKey)关系,它将特定的书与多个副本相关联。