我目前正在掌握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
,但没有太大的乐趣。
答案 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)
ManyToMany
和Library
之间的Book
关系很好,因为多个图书馆可以拥有相同的图书。但是,ManyToMany
和Book
之间的CopyOfBook
关系对我没有意义。特定副本可以是特定书籍。你应该拥有的是many-to-one (ForeignKey)
关系,它将特定的书与多个副本相关联。