Django ModelForm-表单显示值
我有一个模型:Django ModelForm-表单显示值,django,django-forms,Django,Django Forms,我有一个模型: class SchedulerProfile(models.Model): user = models.ForeignKey(User, unique=True) first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) def __unicode__(self): return u'%s' % (self.us
class SchedulerProfile(models.Model):
user = models.ForeignKey(User, unique=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __unicode__(self):
return u'%s' % (self.user)
我还有一个与调度器有M2M关系的模型:
class OfficialProfile(models.Model):
user = models.ForeignKey(User, unique=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
schedulers = models.ManyToManyField(SchedulerProfile, verbose_name="Your schedulers", related_name="off_schedulers")
当我从OfficialProfile创建ModelForm时,该表单将调度程序multiselect的内容呈现为用户名。我想让它在字段中显示user.first\u name user.last\u name
,而不是用户。我知道我可以更改unicode返回值来实现这一点,但出于某些原因,我宁愿不这样做。在ModelForm的\uuuuu init\uuuuu
中,您应该能够执行以下操作:
self.fields['schedulers'].queryset = SchedulerProfile.objects.values('user__first_name', 'user__last_name')
但这并没有产生预期的结果。这似乎是一个非常基本的问题,但搜索答案并没有透露太多。从实例中创建子类并覆盖标签
from django.forms import ModelMultipleChoiceField
class SchedulerProfileChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return "%s %s" % (obj.first_name, obj.last_name)
然后在模型表单中使用您的多选字段
class OfficialProfileForm(forms.ModelForm):
schedulers = SchedulerProfileChoiceField(queryset=SchedulerProfile.objects.all())