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
相关产品推荐
相关产品推荐

