django admin编辑模型选择/预取相关?

Luc*_*s03 7 django django-admin

我有一个 Django 网站,带有 model 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)
Run Code Online (Sandbox Code Playgroud)

为此使用外键是一个坏主意,但无论如何,如何使其在 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)
Run Code Online (Sandbox Code Playgroud)

但没有运气。

Luc*_*s03 1

我发现了问题,这是我的错误,我什至没有在问题中提到它:(

这是我的模型,但我没有提到重要的部分:

class Event(models.Model):
    home = models.ForeignKey('Team', related_name='%(class)s_home')
    away = models.ForeignKey('Team', related_name='%(class)s_away')
    merged = models.ForeignKey('Event', null='True', blank='True')
    def __unicode__(self):
        return str(self.id) + ": " + self.home.name + " - " + self.away.name
Run Code Online (Sandbox Code Playgroud)

问题不在于homeor away,而在于为每个事件获取和 的merged字段。self.home.nameself.away.name

替换为

def __unicode__(self):
    return 'Event id: {}'.format(self.id)
Run Code Online (Sandbox Code Playgroud)

并添加mergedlist_select_related 解决我的问题。感谢您的帮助,并对不完整的问题表示歉意。