首页 > 解决方案 > “元组”对象在 UpdateView 上没有“有序”属性

问题描述

它给了我这个错误,对于我的一生,我无法理解为什么:

我有一个从 django-allauth SignupForm 扩展而来的表单...

class LearnerSignupForm(SignupForm):
    first_name = forms.CharField(max_length=40, required=True)
    last_name = forms.CharField(max_length=40, required=True)

该表单在 allauth 注册视图中调用...

class LearnerSignupView(SignupView):
    form_class = LearnerSignupForm
    success_url = reverse_lazy('users:redirect_profile_mixin')

视图重定向到一个 mixin(它扩展了 RedirectView,它从请求中获取经过身份验证的用户,并将连接重定向到传递参数 user.id 的 UpdateView。

class LearnerUpdateView(UpdateView):
    model = User
    form_class = UserForm
    formset_Class = LearnerFormSet
    template_name = "formset_edit_learner.html"
    success_url = "home"

    def get_context_data(self, **kwargs):
        context = super(LearnerUpdateView, self).get_context_data(**kwargs)
        qs = Learner.objects.get_or_create(user=self.request.user)
        formset = LearnerFormSet(queryset=qs)
        context["learner_formset"] = formset
        return context

然后最后到UpdateView。正是在这一点上,我得到了错误

“元组”对象没有“有序”属性

异常位置:C:\Users\aless.virtualenvs\hs_03-LQeWV4ia\lib\site-packages\django\forms\models.py,第 639 行,在 get_queryset

我知道我可能正在做一些非常愚蠢的事情,但我就是看不到它。我提前感谢谁可以提供一些建议!

标签: djangodjango-viewsdjango-allauth

解决方案


正如 acg 所说,你正在处理一个元组:https ://docs.djangoproject.com/en/3.1/ref/models/querysets/#get-or-create

返回 (object, created) 的元组,其中 object 是检索或创建的对象, created 是指定是否创建新对象的布尔值。

因此,在不更改代码的情况下,您应该这样做:

qs = Learner.objects.get_or_create(user=self.request.user)
formset = LearnerFormSet(queryset=qs[0])

但这不是很漂亮,你最好这样做:

qs, created = Learner.objects.get_or_create(user=self.request.user)
formset = LearnerFormSet(queryset=qs)

推荐阅读