web-dev-qa-db-ja.com

Django adminの関連フィールドで検索

私は見てきました ドキュメント for search_fields in Django adminは、関連するフィールドの検索を許可しようとしています。

だから、ここに私のモデルのいくつかがあります。

# models.py
class Team(models.Model):
    name = models.CharField(max_length=255)


class AgeGroup(models.Model):
    group = models.CharField(max_length=255)


class Runner(models.Model):
    """
    Model for the runner holding a course record.
    """
    name = models.CharField(max_length=100)
    agegroup = models.ForeignKey(AgeGroup)
    team = models.ForeignKey(Team, blank=True, null=True)


class Result(models.Model):
    """
    Model for the results of records.
    """
    runner = models.ForeignKey(Runner)
    year = models.IntegerField(_("Year"))
    time = models.CharField(_("Time"), max_length=8)


class YearRecord(models.Model):
    """
    Model for storing the course records of a year.
    """
    result = models.ForeignKey(Result)
    year = models.IntegerField()

私が欲しいのは、YearRecord管理者がランナーが所属するチームを検索できるようにすることです。ただし、Runner FK関係を検索フィールドに追加しようとすると、検索でエラーが発生します。 TypeError: Related Field got invalid lookup: icontains

だから、これが私が関係を検索できるようにしたい管理者設定です。これはドキュメントと一致すると確信していますが、ここで何かを誤解していますか?これは解決できますか&result__runnerRunnerモデルのチームフィールドに拡張されますか?

# admin.py
class YearRecordAdmin(admin.ModelAdmin):
    model = YearRecord
    list_display = ('result', 'get_agegroup', 'get_team', 'year')
    search_fields = ['result__runner', 'year']

    def get_team(self, obj):
        return obj.result.runner.team
    get_team.short_description = _("Team")

    def get_agegroup(self, obj):
        return obj.result.runner.agegroup
    get_agegroup.short_description = _("Age group")
17
markwalker_

ドキュメントには次のように書かれています。

これらのフィールドは、CharFieldTextFieldなどのテキストフィールドである必要があります。

したがって、'result__runner__team__name'を使用する必要があります。

26
Germano