【问题标题】:'User' object has no attribute 'get' with formset (passing user to get a queryset)“用户”对象没有带有表单集的属性“获取”(通过用户获取查询集)
【发布时间】:2017-09-18 15:36:33
【问题描述】:

我正在尝试为特定用户显示表单集。

如果用户在“医疗选项卡”上,那么它应该为用户的每个家属显示一个小表单(一个复选框和一个文本框)。

在我的views.py 我有这个:

def get_dep_form(benefit_tab, user):
    if benefit_tab == 'medical':
        DepMedFormSet = formset_factory(DependentMedicalBenefitForm)
        link_formset =  DepMedFormSet(user)
    else:
        return None
    return link_formset

在我的forms.py 我有这个:

class DependentMedicalBenefitForm(forms.ModelForm):
    has_medical = forms.BooleanField()
    med_group_id = forms.CharField(max_length=10)
    class Meta:
        model = Dependent
        fields = [
            'has_medical', 'med_group_id'
        ]

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        queryset = Dependent.objects.filter(employee=self.user)
        super(DependentMedicalBenefitForm, self).__init__(*args, **kwargs)
        self.fields['has_medical'].queryset = queryset
        self.fields['med_group_id'].queryset = queryset

在我的views.py 中,我得到这样的表格:

def index(request, benefit_tab=None):
     #stuff
     if benefit_tab:
          link_formset = get_dep_form(benefit_tab, request.user)
return render(request, 'benefits/index.html', {
     #stuff
     'link_formset': link_formset,
})

我遇到了错误:'User' object has no attribute 'get'

如果我不传递用户,并注释掉 init 函数,那么它会按预期显示一个复选框和文本框 - 但我不知道为什么以这种方式传递用户不工作。

奖励积分:如果您知道如何使用相应的数据预填充表单集 - 一旦我克服了“用户”错误,接下来就是。

【问题讨论】:

  • 您是否错误地复制了索引?返回线上没有压痕。另外,您采取了哪些措施来缩小引发错误的行?

标签: python django django-forms formset


【解决方案1】:

您将用户作为位置参数传递给表单集的实例化,但表单集期待那里的 POST 数据。您想要的是将该值作为关键字 arg 传递给 forms

幸运的是,由于 Django 1.9 表单集通过 form_kwargs argument 支持这一点。所以你应该这样做:

link_formset =  DepMedFormSet(form_kwargs={'user': user})

您不会在处理该表单集的位置显示代码,但请记住也要在此处传递该 form_kwarg。

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多