所以,我有以下模型:
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万个乐队。我不知道,也许是白蛇乐队,金属乐队或其他什么乐队。
我们应该如何在Django管理员页面上做这些?
我试过使用raw_id_fields
,除了我不喜欢它的效果外,它的效果也不是很好。它需要很长的时间来加载,而且它不允许我添加更多的id。很奇怪。
我用过admin.StackedInline
,但没有成功,因为它会尝试加载a中的每一个合同,嗯,它只需要2000年。
当Musician和Band有直接关系时,它和this library的关系就很好。但是现在关系不是直接的了。看起来自动完成不支持它(不管怎么说,它变慢了)。
所以,所有这些,我问你主SO成员。**什么是最好的方法来做到这一点?**是自动完成吗?一定有人遇到了这个问题!
先谢了。
2条答案
按热度按时间cbjzeqam1#
为了避免在管理页面加载每个乐队,请使用
autocomplete_fields
Django doc。就像在
admin.py
中那样使用它。然后不会有任何波段从DB拉到前面,但您将能够通过Select2搜索字段选择它,它将被打印为“标签”。
t30tvxxf2#
我找到了这个解决方案,并希望它能帮助一些人在同样的情况:
我在Product和Characteristic模型之间有很多对很多的关系,所以,在www.example.com中admin.py,我为Product设置了一个如下所示的表单,其中catch/get所有的Characteristic,并为Characteristic创建“predateth_related”,以及“select_related”。