我有一个应用程序,其中有两个模型。第一个称为场景。第二个称为解决方案。场景和解决方案之间存在 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 会神奇地解决我设定的问题。
我有两个问题。
- 我如何让这个保存工作?
- 我是否正在考虑正确地添加到上下文中,还是有更好的方法?
所有帮助表示赞赏。
更新:添加 ScenarioCreateForm
class ScenarioCreateForm(ModelForm):
class Meta:
model = Scenario
exclude = ('user', 'created')