【问题标题】:Field added to django model form not populated by modified queryset添加到 django 模型表单的字段未由修改后的查询集填充
【发布时间】:2014-11-11 21:58:16
【问题描述】:

我有一个模型表单,我在其中添加了一个额外的字段 - is_flagged。

#forms.py
class UserForm(forms.ModelForm):

    is_flagged = forms.BooleanField(required=False)

    class Meta:
        model = CustomUser
        fields = ['username','is_flagged']

现在,因为我的用户模型没有“is_flagged”属性,所以我通过修改后的查询集为每个用户创建此值。

#managers.py
class FlaggedUserManager(models.Manager):

    def get_queryset(self):
        qs = super(FlaggedUserManager, self).get_queryset().all()
        for user in qs:
            user.is_flagged = True
        return qs

#user model
flagged_users = FlaggedUserManager()

接下来,我使用我的自定义查询集创建一个模型表单集来填充表单。

base_formset = modelformset_factory(CustomUser, form=UserForm, extra=0)
formset = base_formset(queryset=CustomUser.flagged_users.all())
return {'formset': formset}

一切都按预期工作,为所有用户呈现字段“is_flagged”,但数据未填充表单,因为呈现的复选框都设置为 0。

谁能建议我做错了什么,以及我如何能够从修改后的查询集中填充此字段?

提前致谢,

【问题讨论】:

  • 只是想知道,如果您修改模板以反映如下内容会发生什么:{% if user.is_flagged %} <input type="checkbox" name="" value="" checked></input> {% else %} <input type="checkbox" name="" value="" ></input> {% endif %}
  • 我很确定这会奏效,尽管看起来我可能没有时间尝试。我通过将参数传递给表单集来解决整个问题。感谢您的建议!

标签: django django-forms


【解决方案1】:

好的,最后我通过以另一种方式接近它并将参数传递给表单集来解决这个问题:

Django Passing Custom Form Parameters to Formset

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2016-11-06
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    相关资源
    最近更新 更多