Ответ 1
Документация гласит:
Эти поля должны быть каким-то текстовым полем, например CharField
или TextField
.
поэтому вы должны использовать 'result__runner__team__name'
.
Я смотрел документы для search_fields
в 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'
.
Сейчас я изучаю джанго, и мне повезло увидеть ваш пример. Я обычно определяю одно поле в модели следующим образом: isdel = models.IntegerField (по умолчанию = 0, verbose_name = 'if delete')。 Но в вашем примере поля в "Result" модели, "year" и "time" являются определяется способом xxx = model.IntegerField(("xxx")). Есть "", и таким образом произошли ошибки, используя мою среду, я хочу знать, почему. Спасибо.