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

Django新手问题:用户表单中员工显示为Employee Object而非姓名

Django表单员工显示异常问题解决

我是Django新手,开发Web应用时需要给用户分配员工。在用户表单中调用了未分配用户且状态为活跃的员工,但页面的下拉列表里,员工并未显示姓名,只显示“Employee Object(8)”这类内容。

相关代码

User模型

class User(AbstractUser):
  active = models.BooleanField(default=True)
  employee = models.OneToOneField(Employee,on_delete=models.CASCADE,null=True)

  def __str__ (self):
    return '{}'.format(self.username,self.groups,self.active,self.employee)

User表单

class UserForm(UserCreationForm):

  username = forms.CharField(label="User",
  widget=forms.TextInput(attrs{"class":"formcontrol"}))

  groups = forms.ModelMultipleChoiceField(label="Rol",queryset=Group.objects.all(),
  widget=forms.CheckboxSelectMultiple,required=True)

  password1 = forms.PasswordInput(attrs={'class':'form-control'})
  password2 = forms.PasswordInput(attrs={'class':'form-control'})

  employee = forms.ModelChoiceField(queryset=Employee.objects.filter(user=None,active=True),
  widget=forms.Select(attrs={'class':'form-control'}))


class Meta:
    model = User
    fields = [
        "username",
        "password1",
        "password2",
        "groups",
        "employee",
        #"active",
        ]

Employee模型

class Employee(Person):

    name = models.CharField(max_length=100)
    active = models.BooleanField(default=True)

    def __str__(self):
           return'{}'.format(self.doc,self.address,self.email,self.phone,self.name,self.active)

解决方法

问题出在Employee模型的__str__方法上。Django渲染ModelChoiceField的下拉选项时,会调用模型的__str__方法获取显示文本。你当前的__str__把多个字段直接拼接,格式混乱且未优先展示姓名,导致系统 fallback 到默认的对象标识格式。

修改Employee的__str__方法,直接返回员工姓名,或者搭配其他标识信息:

def __str__(self):
    # 仅返回姓名
    return self.name
    # 或带文档号的组合,信息更完整
    # return f"{self.name} ({self.doc})"

修改后重启服务,表单下拉列表就会正常显示员工姓名了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:25:19