【发布时间】:2023-12-27 06:56:02
【问题描述】:
所以,我有以下型号:
class Band(models.Model):
name = models.CharField(max_length=50)
class Contract(models.Model):
band = models.ForeignKey(Band)
when = models.DateTimeField(auto_now_add=True)
salary = models.IntegerField()
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
bands = models.ManyToManyField(Band, through=Contract)
class Album(models.Model):
artist = models.ForeignKey(Musician)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()
所以,我想在管理页面上公开它。到目前为止,一切顺利。
请注意,我们这里的音乐家不断进出乐队。有人说其中一位在他的一生中甚至已经在超过 200 万支乐队中演出。我不知道,也许乐队是 Whitesnake、Metallica 之类的。
我们应该如何在 Django 管理页面上做到这一点?
我尝试使用raw_id_fields,除了我不喜欢这种效果之外,它效果不佳。加载花费了很多时间,并且没有让我添加更多的 id。很奇怪。
我使用admin.StackedInline 没有运气,因为它会尝试加载每个合同,而这将只需要 2000 年。
当 Musician 与 Band 有直接关系时,它与 this library 合作得很好。但现在这种关系不是直接的。看起来自动完成不支持它(反正它变慢了)。
所以,关于这一切,我请教各位 SO 成员。 最好的方法是什么?它是自动完成的吗?一定有人遇到过这个问题!
提前致谢。
【问题讨论】:
-
不确定它在处理大量记录时的表现如何,但您是否尝试过filter_horzontal 或filter_vertical?
-
如何处理具有 through 属性的多对多关系?
-
这里有一些可能的解决方案:*.com/questions/10110606/…
标签: python django django-admin many-to-many