【发布时间】:2021-02-07 16:35:40
【问题描述】:
我正在创建一个面板,用户可以在其中将分配分配给其他用户。我正在尝试使用 ModelMultipleChoiceField 和一个名为 AssignedUsersForm 的表单来构建它
forms.py
class AssignedUsersForm(ModelForm):
class Meta:
model = Assignment
fields = ['users']
custom_users = CustomUser.objects.all()
users = forms.ModelMultipleChoiceField(queryset=custom_users, widget=forms.CheckboxSelectMultiple())
模板
<form method="post" id="assigned_users_form">
{% csrf_token %}
{{ assigned_users_form.errors }}
{{ assigned_users_form.non_field_errors }}
<div class="fieldWrapper">
{{ assigned_users_form.content.errors }}
{% for user in assigned_users_form.users %}
<div class="myradio">
{{ user }}
</div>
{% endfor %}
<br>
<div style="text-align:center;">
<input class="input-btn" type="submit" value="Save" name='submit_assigned_users_form'>
</div>
</form>
我已经成功地在我的 HTML 中分别呈现了 CheckboxSelectMultiple 的每个选项。
不幸的是,'user' 的每次迭代都会呈现 CustomUser 对象 (#) - 对象的默认名称。
据我了解,Checkbox 小部件不会将原始查询集传递给模板。因此,我无法访问每个用户的模型属性并呈现姓名、头像等信息。
是否有一种方法可以访问清单中表示的实际对象,而不是 _ str _ 值?
我考虑过在模板中运行查询集的并行迭代,但我不确定这在 Django 中是否可行。
我也考虑过创建自定义模板标签以根据 str 中的 id 访问每个对象,但这似乎有点过头了?
有没有我在这里遗漏的更直观的方法?
【问题讨论】:
-
Choices 应该是 (redable_value, exact_value) 格式的元组,所以问题是,你想设置什么为 (redable_value, exact_value) b>可读值?
-
我想 readable_value 是对象,但我不知道如何编码?
-
应该不是对象,而是对象的
PK值 -
是的,我知道 pk 存储在元组中。您知道从模板访问该 id 的语法吗?我收到一个错误,提示无法迭代绑定的对象
标签: django