django - “元组”对象在 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
我知道我可能正在做一些非常愚蠢的事情,但我就是看不到它。我提前感谢谁可以提供一些建议!
解决方案
正如 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)
推荐阅读
- c# - 转换字典
> 列出 与 concat 键/值 c# - javascript - 从javascript更改顶部div内的文本后div重叠
- css - materialize.css 中的 materialboxed 不起作用
- pyspark - Pyspark:使用窗口函数按日期将数据框保存到单个 csv?
- python - 为什么当我尝试执行登录时,我没有得到下一页的 html
- javascript - React Native:useState setter 不会重新渲染
- excel - VBA - “可用参考”存储在哪里?
- flutter - 制作新小部件后清除类的列表
- visual-studio-code - 您可以将自定义图标分配给还没有图标的文件类型吗?
- css - Bootstrap 选项卡左侧的意外填充