Я хочу создать форму, в которой пользователь может выбрать объект модели, но выбор будет отфильтрован в зависимости от пользователя. Затем я хочу передать этот объект на страницу шаблона html, чтобы я мог отобразить поля объекта на странице.
Я получил форму для правильного отображения объектов, поэтому функция get работает, но когда пользователь отправляет форму, я получаю сообщение об ошибке атрибута, в котором говорится, что «объект QueryDict не имеет атрибута» «». Поэтому я предполагаю, что с моей функцией записи что-то не так.
Трассировка стека ошибок
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'
forms.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')
views.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)