在django admin中搜索相关字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在django admin中搜索相关字段相关的知识,希望对你有一定的参考价值。

我一直在django admin中查看the docs for search_fields,试图允许搜索相关字段。

所以,这是我的一些模型。

# 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")
答案

文件内容如下:

这些字段应该是某种文本字段,例如CharFieldTextField

所以你应该使用'result__runner__team__name'

以上是关于在django admin中搜索相关字段的主要内容,如果未能解决你的问题,请参考以下文章

Django admin:将选定的相关字段框更改为自动完成

在搜索字段中正确使用外键引用,Django admin

Django Admin 中的 ForeignKey 或 ManyToMany 字段搜索

如何在 Django-admin 中添加自定义搜索框?

根据值在 Admin 中自定义 Django 表单字段

django admin中的ForeignKey字段