所以,我有以下模型:
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()
所以,我想在管理页面上公开它。到目前为止,非常好。
请注意,我们这里的音乐家不断跳进乐队。有人说他们中的一个人在他的一生中甚至有超过两百万的乐队。我不知道,也许乐队是Whitesnake,Metallica或其他什么。
我们应该如何在Django管理页面上执行此操作?
我尝试使用raw_id_fields
除了我不喜欢效果的事实,它没有那么好用。它花了很多时间加载它并没有让我添加更多的ID。怪异。
我使用admin.StackedInline
没有运气,因为它会尝试加载每一份合同,而且,它只需要2千年。
当Musician与Band有直接关系时,它与this library一起工作得很好。但现在这种关系并不是一个直接的关系。看起来自动完成功能并不支持它(无论如何它都变慢了。)
所以,有了这一切,我问你们所有的SO成员。 最好的方法是什么?它是自动完成的吗?有人必须遇到这个问题!
提前致谢。
答案 0 :(得分:0)
为避免加载管理页面中的所有区域,请使用autocomplete_fields
Django doc。
只需在您的admin.py
中使用它即可。
autocomplete_fields = ('bands',)
这时不会从DB的前面拉出任何乐队,但您可以通过Select2搜索字段将其选中,并将其打印为“标签”。