簡體   English   中英

Django在ModelChoiceField上返回錯誤,並在運行時呈現值

[英]Django returns error on ModelChoiceField with values rendered in runtime

首先想到的是:我有一個經理,負責管理不同的分支機構,每個分支機構都分配有餐廳。 我希望他能夠下訂單並選擇可用於其特定分支機構的餐廳。 我使用帶有靜態值的類來記住哪個管理器正在下訂單。

第二:代碼。 forms.py:

class NewOrderFormManager(Form):
    restaurant = forms.ModelChoiceField(queryset=None)
    # other fields here

    def __init__(self, *args, **kwargs):
        super(NewOrderFormManager, self).__init__(*args, **kwargs)
        branches = StaticData.get_branches_assigned_to_manager()
        self.fields['restaurant'].queryset = Restaurant.objects.filter(branch__in=branches)

views.py:

class NewOrderFromManagerFormView(FormView):
    template_name = 'admin_custom/new_order_from_manager_form.html'
    form_class = NewOrderFormManager

    def get(self, request, *args, **kwargs):
        StaticData.find_branches_corresponding_to_manager(request.user)
        return super(NewOrderFromManagerFormView, self).get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        StaticData.find_branches_corresponding_to_manager(request.user)
        return super(NewOrderFromManagerFormView, self).post(request, *args, **kwargs)

    def form_valid(self, form):
        # some code to be executed

儲存類別:

class StaticData:
    branches = None

    @classmethod
    def find_branches_corresponding_to_manager(cls, user):
        cls.branches = None
        if roles.has_role(user, roles.ROLE_ADMIN):
            cls.branches = Branch.objects.all()
        elif roles.has_role(user, roles.ROLE_COURIER_MANAGER):
            cls.branches = user.couriermanager.branches.all()

    @classmethod
    def get_branches_assigned_to_manager(cls):
        return cls.branches

第三:問題。 在為特定餐廳發布請求時,似乎有些麻煩。 當我訪問clean()方法時,我會發現一個錯誤,指出我所做的選擇無效,應該選擇另一個。 account for this purpose and I've checked that I get correct branches when I call使用超級管理員account for this purpose and I've checked that I get correct branches when I call StaticData account for this purpose and I've checked that I get correct branches when I call . The . The餐廳simply doesn't appear in cleaned_data中。 我已經嘗試過挖掘django的文檔和源代碼,但到目前為止都無濟於事。

更新:我已經檢查了服務器日志的輸出,並且看到單擊“提交”按鈕后它會使用GET:

"GET /custom_admin/new_order_from_manager/restaurant=5&price=0.04&phone_number=123123123&street=Gwarna&house_number=1&flat_number=&comment= HTTP/1.1" 200 13887

似乎缺少csfr token是一個問題,因此我將其添加到了表單中:

<form method="post">
        {% csrf_token %}

暫無
暫無

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

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