【问题标题】:How to test CheckboxSelectMultiple in save如何在保存中测试 CheckboxSelectMultiple
【发布时间】:2020-07-25 16:14:46
【问题描述】:

我在 Django 中有一个表单 (ModelForm),我在 init 方法中为用户添加一个字段,如下所示:

self.fields["users"] = forms.ModelMultipleChoiceField(
    queryset=users, widget=forms.CheckboxSelectMultiple, required=False,label="Add Designer(s)"
)

save 方法中,我如何迭代该字段的查询集,但是,我不知道如何测试特定模型是否已被选择/检查。请帮忙。

编辑: 假设您有一个表单,您希望能够将用户添加到某个项目,我将用户字段设置为如上(也使用MultipleChoiceField)但我真正的问题是您如何确定这些复选框的状态(应该添加哪些用户)?

【问题讨论】:

    标签: django forms checkbox


    【解决方案1】:

    设法使用 MultipleChoiceField 而不是 ModelMultipleChoiceField 修复它。然后使用现有事件 ID 填充选项并将其传递给模板。 形式:

    choices = forms.MultipleChoiceField(widget = forms.CheckboxSelectMultiple())
    

    在视图中:

    form.fields['choices'].choices = [(x.eventID, "Event ID: " + x.eventID) for x in unapproved]
    

    还必须更改一些查找和编辑事件对象的逻辑。

    【讨论】:

    • 谢谢!更改为 MultipleChoiceField 给我带来了同样的问题,我更新了我的原始帖子
    【解决方案2】:

    Django documentation 声明 ModelMultipleChoiceField 规范化为模型实例的 QuerySet。这意味着在您的示例中,它只会返回已检查的用户。如果没有检查,它将返回一个空的 QuerySet。

    如果您要覆盖您的 ModelForm save 方法,您可以包含以下内容:

    selected_users = self.cleaned_data.get('users')
    for user in selected_users:
        project_users.add(user)
    

    【讨论】:

    • 谢谢!不幸的是,它仍然返回所有用户,无论他们是否被选中。
    • @user1314147 - 这很奇怪。我已经做了一些测试以确认它应该可以正常工作。你如何检查它返回的内容?
    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多