Django 如何使用modelmultipechoicefield获取模板中用户的全名
我有一张这样的表格:Django 如何使用modelmultipechoicefield获取模板中用户的全名,django,django-forms,django-templates,Django,Django Forms,Django Templates,我有一张这样的表格: class ProjectForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(ProjectForm, self).__init__(*args, **kwargs) members = forms.ModelMultipleChoiceField( label="Members", queryset=User
class ProjectForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProjectForm, self).__init__(*args, **kwargs)
members = forms.ModelMultipleChoiceField(
label="Members",
queryset=User.objects.all(),
widget=forms.CheckboxSelectMultiple,
required=False,
)
class Meta:
model = Project
fields = ['title', 'description', 'objective', 'duration', 'members']
这是我模板中的一部分
{% for pk, member in project_form.members.field.widget.choices %}
<tr>
<td>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="id_members_{{forloop.counter0}}" value="{{pk}}">
<label class="custom-control-label" for="id_members_{{forloop.counter0}}">{{member.first_name}}</label>
</div>
</td>
</tr>
{% endfor %}
所以,现在我想我明白了。您希望手动呈现表单,以便全名显示为复选框的标签。为此,必须访问成员的queryset属性 下面是它的样子
<form action="" method="post">
{% for name, field in project_form.fields.items %}
{% ifequal name 'members' %}
<div>
<label>{{ field.label }}: </label>
<ul>
{% for member in field.queryset %}
<li>
<label for="id_members_{{ forloop.counter0 }}">
<input type="checkbox" name="{{ name }}" >
{{ member.get_full_name }}
</label>
</li>
{% endfor %}
</ul>
</div>
{% else %}
<div>
<label for="id_{{ name }}">{{field.label}}: </label>
<input id="id_{{ name }}" type="{{ field.type }}">
</div>
{% endifequal %}
{% endfor %}
</form>
{%代表名称,项目中的字段\ u form.fields.items%}
{%ifequal name'成员“%”
{{field.label}}:
{field.queryset%中的成员的%s}
-
{{member.get_full_name}
{%endfor%}
{%else%}
{{field.label}}:
{%endifequal%}
{%endfor%}
Models.py
class User(AbstractUser):
bio = models.TextField(max_length=500, blank=True)
avatar = models.ImageField(upload_to=upload_to, default='avatars/user.png')
def __unicode__(self):
return self.first_name + ' ' + self.last_name
检查它您是否尝试过{{member.get_full_name}}?它不起作用,请尝试以下方法:{%for project_form.members%}{{member.get_full_name}{%endfor%}第一种或第二种方法对我都不起作用,请看我上面的编辑。你能确保Django admin中的用户有名字和姓氏吗?可能的情况是,first_name和last_name字段都为空。大多数用户都有first和last_name,因为您有一个自定义的
User
从AbstractBaseUser
扩展而来,您必须在您的用户模型中包括first_name和last_name。在您的模板中,现在应该是{member.get_full_name}
如果这不起作用,请尝试从Django shell访问用户,并确认您确实可以获取他们的名字和姓氏。
class User(AbstractUser):
bio = models.TextField(max_length=500, blank=True)
avatar = models.ImageField(upload_to=upload_to, default='avatars/user.png')
def __unicode__(self):
return self.first_name + ' ' + self.last_name