django管理员

时间:2015-10-09 05:20:26

标签: python django django-admin many-to-many

所以,我有以下模型:

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成员。 最好的方法是什么?它是自动完成的吗?有人必须遇到这个问题!

提前致谢。

1 个答案:

答案 0 :(得分:0)

为避免加载管理页面中的所有区域,请使用autocomplete_fields Django doc
只需在您的admin.py中使用它即可。

autocomplete_fields = ('bands',)

这时不会从DB的前面拉出任何乐队,但您可以通过Select2搜索字段将其选中,并将其打印为“标签”。