python - 如何在 django 中处理 ModelChoiceField 表单的发布请求?属性错误?
问题描述
我想创建一个表单,用户可以在其中选择模型对象,但选择是根据用户过滤的。然后我想将该对象传递给 html 模板页面,这样我就可以在页面上显示对象字段。
我得到了正确显示对象的表单,所以 get 函数正在工作,但是当用户提交表单时,我收到一个属性错误,上面写着“'QueryDict' 对象没有属性'user'”。所以我假设我的帖子功能有问题。
错误堆栈跟踪
File "/Users/wsm-app/env/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/Users/wsm-app/polls/views.py", line 244, in post
form = calendarForm(request=request.POST)
File "/Users/wsm-app/polls/forms.py", line 25, in __init__
user = request.user
AttributeError: 'QueryDict' object has no attribute 'user'
表格.py
class calendarForm(forms.Form):
inputDate = forms.ModelChoiceField(label="Select a date", queryset = None, empty_label="No date selected")
def __init__(self, *args, **kwargs):
request = kwargs.pop('request', None)
super().__init__(*args, **kwargs)
if request:
user = request.user
self.fields['inputDate'].queryset = Analysis.objects.filter(user=user).order_by('sessionID__startDate')
视图.py
class MultiView(generic.TemplateView):
template_name = 'polls/analysis.html'
def get(self,request):
if self.request.user.is_authenticated:
form = calendarForm(request=request)
userid = self.request.user.id
args = {'form': form,'obj':Analysis.objects.filter(user=userid).order_by('sessionID__startDate').last()}
else:
args = {'form': form}
return render(request, self.template_name,args)
def post(self,request):
form = calendarForm(request=request.POST)
if self.request.user.is_authenticated:
if form.is_valid():
obj = form.cleaned_data['inputDate']
form = calendarForm(request=request)
args = {'form':form,'obj':obj}
else:
form = calendarForm(request=request)
args = {'form':form}
return render(request, self.template_name, args)
解决方案
用户在请求对象内而不是在 POST 参数内
def post(self,request):
form = calendarForm(request=request)
你得到request.POST.user
的是你通过request.POST
而不是请求本身(用户通过request.user
推荐阅读
- qt - 通过插件编写将菜单操作添加到 Qt Designer
- data-visualization - 删除 Splunk 图表中的一列名称
- javascript - 为什么过滤方法不能正常工作?
- php - 提取字符串中的半角数字并用php将它们分成3位数字
- azure-machine-learning-studio - 转换从 Cosmos DB 导入的数据的数据列
- django - Django values_list() 小写
- neural-network - 使用 sciml_train 改进通用微分方程训练的方法
- linux - bash +如何验证字符串是否为布尔值
- python - Pandas 按 2 列中的行计算平均偏差
- javascript - 数字 0 不能在 JS 中检查