Pat*_*sut 9 python django many-to-many django-admin
所以,我有以下模型:
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()
Run Code Online (Sandbox Code Playgroud)
所以,我想在管理页面上公开这一点。到目前为止,一切都很好。
请注意,我们这里的音乐家不断地在乐队中进进出出。有人说,其中一位一生中曾参加过超过 200 万支乐队。我不知道,也许这些乐队是 Whitesnake、Metallica 之类的。
我们应该如何在 Django 管理页面上做到这一点?
我尝试使用raw_id_fields,除了我不喜欢这种效果之外,它的效果也不是很好。加载花费了很多时间,并且不允许我添加更多 ID。诡异的。
我用过,admin.StackedInline但运气不好,因为它会尝试加载每个合约,而这只需要 2000 年。
当 Musician 与 Band 有直接关系时,它与这个库配合得很好。但现在这种关系并不是直接的。看起来自动完成功能不支持它(无论如何它都变得很慢)。
因此,我向各位 SO 成员大人请教。最好的方法是什么?是自动完成吗?一定有人遇到过这个问题!
提前致谢。
为了避免加载管理页面中的每个带区,请使用autocomplete_fields Django doc。
只需在您的admin.py.
autocomplete_fields = ('bands',)
Run Code Online (Sandbox Code Playgroud)
然后,不会将任何带从数据库拉到前面,但您将能够通过 Select2 搜索字段选择它,并将其打印为“标签”。
| 归档时间: |
|
| 查看次数: |
1199 次 |
| 最近记录: |