私は見てきました ドキュメント 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__runner
Runner
モデルのチームフィールドに拡張されますか?
# 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")
ドキュメントには次のように書かれています。
これらのフィールドは、CharField
やTextField
などのテキストフィールドである必要があります。
したがって、'result__runner__team__name'
を使用する必要があります。