0
第一個想法:我有一個經理,負責管理不同分支,每個分支都有餐館分配給他們。我希望他能夠下訂單並選擇可用於他的特定分店的餐館。我使用具有靜態值的類來記住哪位經理正在下訂單。Django在ModelChoiceField上返回運行時出現的值的錯誤
二:代碼。 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()
方法時,我可以發現一個錯誤,說我所做的選擇是無效的,我應該選擇另一個。我正在使用superadmin'account for this purpose and I've checked that I get correct branches when I call
StaticData . The
restaurant simply doesn't appear in
cleared_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