django - 如何使用 ModelMultipleChoiceField 在模板中获取用户的全名
问题描述
我有一个看起来像这样的表格:
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 %}
我想获取每个用户的全名而不是用户名,我该怎么做。
编辑
我的模型:
class User(AbstractUser):
bio = models.TextField(max_length=500, blank=True)
avatar = models.ImageField(upload_to=upload_to, default='avatars/user.png')
def get_full_name(self):
return self.first_name + ' ' + self.last_name
解决方案
所以,现在我想我明白了。您想手动呈现表单,以便全名显示为复选框的标签。为此,您必须访问成员的查询集属性。
这是它的样子,
<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>
推荐阅读
- java - 在表格上方添加图片 - Itext
- unity3d - 如何制作迷你高尔夫王等触控控件
- node.js - 安装 npm 时,Mac OS High Sierra 上的 node-gyp 重建失败
- typescript - 如何递归解析类型?
- gitkraken - 使用 git kraken 使用 --no-verify 提交消息
- java - 将 MySQL Azure 与 Java 连接起来
- android - 如何解决 gradle sonarqube 兼容性错误?
- php - PHP通过键和值创建数组组
- javascript - 在 For 循环或 While 循环的每个循环中多次调用提示 Node.js 包的问题
- git - 如何将 git 初始化的子目录添加到暂存区然后提交?