【问题标题】:Django ModelForm - form display valuesDjango ModelForm - 表单显示值
【发布时间】:2015-05-26 17:08:18
【问题描述】:

我有一个模型:

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 时,表单将调度程序多选的内容呈现为用户名。我想让它在字段中而不是用户中显示user.first_name user.last_name。我知道我可以更改 unicode 返回值来完成此操作,但出于某种原因,我宁愿不这样做。在 ModelForm 的 __init__ 中,您应该能够执行以下操作:

self.fields['schedulers'].queryset = SchedulerProfile.objects.values('user__first_name', 'user__last_name')

但这不会产生预期的结果。这似乎是一个非常基本的问题,但寻找答案并没有太多发现。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    子类ModelMultipleChoiceField 并覆盖label_from_instance

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

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 2013-11-13
      • 1970-01-01
      • 2021-07-06
      • 2015-04-14
      • 2020-12-03
      • 2012-07-30
      • 2012-05-24
      相关资源
      最近更新 更多