2 つのモデルを含むアプリがあります。最初はシナリオと呼ばれます。2 つ目はソリューションと呼ばれます。シナリオとソリューションの間には M2M があります。シナリオに属するソリューションはいくつでも持つことができ、その逆も可能です。かなり簡単です。
秘訣は、すべてがユーザーでフィルタリングされることです。ですから、私が働いているときに、他の人が持っている解決策やシナリオを見たくありません。
CreateView であるビューを作成しました。フィルタリングされたソリューションのリストをコンテキストに追加します。コンテキストに入ったら、テンプレートでループして ID を取得します。それをフォームに追加します。
私が抱えている問題は、form_valid メソッドにあります。
選択したアイテムをセーブに追加して、シナリオに追加するにはどうすればよいですか?
これが私の見解です:
class ScenarioCreate(CreateView):
success_url = reverse_lazy('scenario_list')
template_name = "gps/create_scenario_form.html"
model = Scenario
form_class = ScenarioCreateForm
def get_context_data(self, **kwargs):
context = super(ScenarioCreate, self).get_context_data(**kwargs)
context['solution_list'] = Solution.objects.filter(user=self.request.user)
return context
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.solutions = form.cleaned_data['solutions'] # <= what goes here?
self.object.save()
form.save_m2m()
return HttpResponseRedirect(self.get_success_url())
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ScenarioCreate, self).dispatch(*args, **kwargs)
私は、cleaned_data がセットの問題を魔法のように解決すると思っていました。
2 つの質問があります。
- その保存を機能させるにはどうすればよいですか?
- コンテキストに正しく追加することを考えていますか、それとももっと良い方法がありますか?
すべての助けに感謝します。
更新: ScenarioCreateForm の追加
class ScenarioCreateForm(ModelForm):
class Meta:
model = Scenario
exclude = ('user', 'created')