gpt4 book ai didi

python - django 管理表单上的大型多对多关系

转载 作者:行者123 更新时间:2023-12-03 21:37:51 24 4
gpt4 key购买 nike

所以,我有以下模型:

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如果运气不好,它会尝试加载每个契约(Contract),嗯,这将只需要 2000 年。

当音乐家与乐队有直接关系时,它与 this library 一起工作得很好。 .但现在这种关系不是直的。看起来自动完成不支持它(无论如何它都变慢了)。

所以,有了这一切,我问你们 SO 大人。 做到这一点的最佳方法是什么? 它是自动完成的吗?一定有人遇到过这个问题!

提前致谢。

最佳答案

为避免加载管理页面中的每个频段,请使用 autocomplete_fields Django doc .
只需在您的 admin.py 中像这样使用它.

autocomplete_fields = ('bands',)
然后不会从 DB 拉到前面的 strip ,但您将能够通过 Select2 搜索字段选择它,并将其打印为“标签”。

关于python - django 管理表单上的大型多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33030432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com