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

Django表单下拉框使用ForeignKey时显示为model object如何解决

问题原因

Django渲染ForeignKey字段对应的下拉选项时,默认调用关联模型(此处为CompanyProfileModel)的__str__方法获取展示文本。未自定义CompanyProfileModel的__str__方法时,Django会使用默认实现返回模型类名 object (主键ID)格式的内容,因此下拉框会显示为非预期的model object内容。

修复方案

方案1:自定义关联模型的__str__方法(通用方案)

在CompanyProfileModel的定义中新增__str__方法,返回需要在下拉框展示的字段内容即可,修改后所有涉及该模型实例展示的场景(包括admin后台、各类表单、实例打印等)都会生效,示例代码如下:

class CompanyProfileModel(models.Model):
    # 原有字段定义,例如公司名称、注册地址等
    company_name = models.CharField(max_length=200)
    # 其余原有字段...

    # 新增__str__方法
    def __str__(self):
        # 此处返回需要展示的内容,例如公司名称
        return self.company_name

方案2:仅在当前表单自定义下拉展示内容

如果不需要全局修改CompanyProfileModel的展示逻辑,只需要在当前Job相关表单自定义下拉文本,可以在表单类中通过label_from_instance参数设置自定义回调:

from django import forms
from .models import JobsModel, CompanyProfileModel

class JobForm(forms.ModelForm):
    # 重写company字段的选项展示逻辑
    company = forms.ModelChoiceField(
        queryset=CompanyProfileModel.objects.all(),
        # 自定义展示内容,可拼接多个字段
        label_from_instance=lambda obj: f"{obj.company_name}({obj.location})"
    )

    class Meta:
        model = JobsModel
        fields = "__all__"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:12:02