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())