簡體   English   中英

如何處理 django 中的 ModelChoiceField 表單的 post 請求? 屬性錯誤?

[英]How to handle post request of a ModelChoiceField form in django? Attribute Error?

我想創建一個表單,用戶可以在其中使用 select 和 model object,但選擇會根據用戶進行過濾。 然后我想將 object 傳遞給 html 模板頁面,這樣我就可以在頁面上顯示 object 字段。

我得到了正確顯示對象的表單,所以 get function 正在工作,但是當用戶提交表單時,我收到一個屬性錯誤,上面寫着“'QueryDict' object 沒有屬性'user'”。 所以我假設我的帖子 function 有問題。

錯誤堆棧跟蹤

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')

視圖.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)

用戶在請求 object 內,不在 POST 參數內

def post(self,request):
    form = calendarForm(request=request)

當您傳遞request.POST而不是請求本身時,您將獲得request.POST.user (通過request.user訪問用戶

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM