【问题标题】:'tuple' object has no attribute 'ordered' on UpdateView“元组”对象在 UpdateView 上没有“有序”属性
【发布时间】:2021-03-03 07:54:05
【问题描述】:

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

我有一个从 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 中

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

【问题讨论】:

  • get_or_create 方法返回一个 (object, created) 元组,这就是您尝试用作查询集的内容。

标签: django django-views django-allauth


【解决方案1】:

正如 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2020-01-27
    • 2022-01-21
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多