gpt4 book ai didi

django 管理员编辑模型选择/prefetch_related?

转载 作者:行者123 更新时间:2023-12-04 11:37:19 25 4
gpt4 key购买 nike

我有一个 Django 网站,模型为 Event ,让我们说:

class Event(models.Model):
home = models.ForeignKey('Team', related_name='%(class)s_home')
away = models.ForeignKey('Team', related_name='%(class)s_away')
...

class Team(models.Model):
name = models.CharField("team's name", max_length=100)

为此使用外键是一个坏主意,但无论如何,如何使其在 Django 管理页面中可用?
在管理员编辑事件页面中,为此获取了大量外键: http://127.0.0.1:8000/admin/event/event/116255/
它产生大量的选择,如: SELECT "event_team"."id", "event_team"."name" FROM "event_team" WHERE "event_team"."id" = 346;
和页面死亡。我在玩这些:
class EventAdmin(admin.ModelAdmin):
list_display = ('id', 'home', 'away', 'date_game', 'sport', 'result')
search_fields = ['home__name', 'away__name']
list_select_related = (
'home', 'away', 'league', 'sport', ...
)

def get_queryset(self, request):
return super(EventAdmin, self).get_queryset(request).select_related(*self.list_select_related)
admin.site.register(Event, EventAdmin)

但没有运气。

最佳答案

最简单、最快捷的方式

将添加 raw_id_fields在您的 ModelAdmin ( Django ModelAdmin.raw_id_fields documentation ) 上:

class EventAdmin(admin.ModelAdmin):
raw_id_fields = ("home", "away")

它会产生一个带有 FK 字段 ID 的 inputText,例如:
Django ModelAdmin.raw_id_fields text Input example .
加载会很快,因为它不会填充所有团队的选择列表。
您将拥有 Team ModelAdmin 的 Django 管理员 change_view选择团队,多亏了浏览图标。

更好的方法?

在 UX 方面更优雅,它需要您知道团队名称的一部分:使用 ajax 自动完成小部件来表示您的领域。

您可以使用例如 Django Autocomplete Light (DAL) quick tutorial通过为您的管理员提供自定义表单和 autocompleteModelSelect2为您 homeaway字段(在 ajax View 中有 2 个不同的 QS)。
它将产生一个如下所示的字段:

DAL autocomplete ModelSelect2 widget example .
这个链接的教程有你需要的一切!

或者您可以选择另一个第三方插件或构建您自己的字段/小部件来产生类似的结果。

关于django 管理员编辑模型选择/prefetch_related?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756086/

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