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

在Django Admin中自定义One-To-One关系字段的下拉框展示内容

解决Django OneToOne关联字段下拉框展示内容的方案

有两种常用实现方式,可根据需求选择:

方案1:修改关联模型的__str__方法(全局生效)

Django默认会调用关联模型的__str__方法渲染外键、一对一关联字段的下拉选项文本,直接修改你绑定的Profile模型的__str__方法即可:

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # 其余自定义字段省略

    def __str__(self):
        # 按照 用户名(ID) 格式返回展示文本
        return f"{self.user.username}({self.id})"

该修改会全局生效,所有用到Profile模型作为关联选项的场景都会使用这个格式展示。

方案2:自定义表单字段(仅当前表单生效)

如果你只需要在特定表单里修改展示格式,不想影响全局的__str__输出,可以在对应表单类里重写关联字段的label_from_instance方法:

from django import forms
from .models import YourBusinessModel, Profile

class YourBusinessModelForm(forms.ModelForm):
    class Meta:
        model = YourBusinessModel
        fields = "__all__"

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 此处profile替换为你的业务模型里对应的OneToOne关联字段名
        self.fields['profile'].label_from_instance = lambda obj: f"{obj.user.username}({obj.id})"

该修改仅对当前表单生效,不会影响其他场景的Profile模型文本展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:18:03