You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django后台搜索外键字段报错:Related Field got invalid lookup: icontains

Django后台CourseTake模型搜索学生姓名报错的解决办法

问题

在Django后台给CourseTake模型的管理页面配置搜索框,想要搜索关联学生的姓名,但设置search_fields = ['student']后,触发搜索时出现错误:Related Field got invalid lookup: icontains。

报错原因

student是CourseTake模型的外键字段,直接将外键字段放入search_fields中,Django会尝试对整个Student模型实例使用icontains查找,但外键对象不支持这种查找方式,必须指定关联模型中的具体字符型字段(比如first_name、last_name)才能进行模糊搜索。

解决方法

在search_fields中使用**双下划线__**关联到Student模型的具体字段,格式为外键字段名__关联模型字段名,可以同时添加多个字段实现多维度搜索。

修改后的代码

admin.py

from django.contrib import admin
import models

@admin.register(models.Student)
class StudentAdmin(admin.ModelAdmin):
    list_display = ['first_name', 'last_name', 'city']


@admin.register(models.CourseTake)
class CourseTakeAdmin(admin.ModelAdmin):
    list_display = ['student', 'course', 'grade', 'performance']
    list_editable = ['grade']
    # 指定搜索学生的名和姓
    search_fields = ['student__first_name', 'student__last_name']

    # 修正方法参数:原参数名student会和外键字段名冲突,改为obj
    def student(self, obj):
        return obj.student.first_name

models.py(无需修改,仅作参考)

from django.db import models

class Student(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    date_adimitted = models.DateField(auto_now=True)
    address = models.CharField(max_length=255)
    city = models.CharField(max_length=255)
    state = models.CharField(max_length=255)

    def __str__(self) -> str:
        return f'{self.first_name} {self.last_name}'


class CourseTake(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='coursetake')
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    grade = models.DecimalField(max_digits=5, decimal_places=2)

    class Meta:
        unique_together = [['student', 'course']]

    def __str__(self) -> str:
        return f'{self.student.first_name} {self.student.last_name}'

修改完成后,在后台搜索框输入学生的名或姓,就能匹配到对应的CourseTake记录了。

内容的提问来源于stack exchange,提问作者Alotab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:20:42