Django ModelForm - 表单显示值
Django ModelForm - form display values
我有一个模型:
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 return 值来完成此操作,但出于某些原因我宁愿不这样做。在 ModelForm 的 __init__
中,您应该能够执行如下操作:
self.fields['schedulers'].queryset = SchedulerProfile.objects.values('user__first_name', 'user__last_name')
但这并没有产生预期的结果。这似乎是一个非常基本的问题,但搜索答案并没有透露太多信息。
子类 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())
我有一个模型:
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 return 值来完成此操作,但出于某些原因我宁愿不这样做。在 ModelForm 的 __init__
中,您应该能够执行如下操作:
self.fields['schedulers'].queryset = SchedulerProfile.objects.values('user__first_name', 'user__last_name')
但这并没有产生预期的结果。这似乎是一个非常基本的问题,但搜索答案并没有透露太多信息。
子类 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())