2016-12-04 4 views
0

最初に考えてみましょう:私には、それぞれにレストランが割り当てられた異なる支店を管理するマネージャーがいます。私は彼が注文し、彼の特定の支店で利用できるレストランを選ぶことができるようにしたい。私は静的な値を持つクラスを使用して、どのマネージャが注文をしているかを覚えています。Djangoは実行時にレンダリングされた値でModelChoiceFieldにエラーを返します

第2:コード。 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レストランsimply doesn't appear in cleaned_data`を使用しています。私はdjangoのドキュメンテーションとソースコードの両方を掘り下げようとしましたが、今のところ利用できません。

UPDATE: 私は、サーバーのログ出力を検査していると私はそれが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 

答えて

0

csfr tokenの欠如が問題だったようですので、私は」私のフォームに追加しました:

<form method="post"> 
     {% csrf_token %} 
関連する問題