我有一个应用程序,里面有两个模型。第一个叫做场景。第二种叫做解决方案。场景和解决方案之间存在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)
我原以为cleaning_data会神奇地解决我的设定问题。
我有两个问题。
所有帮助表示赞赏。
更新:添加ScenarioCreateForm
class ScenarioCreateForm(ModelForm):
class Meta:
model = Scenario
exclude = ('user', 'created')