添加已使用Django Generic Class View在表单中过滤的m2m项目

时间:2013-06-08 21:45:56

标签: django django-views django-class-based-views

我有一个应用程序,里面有两个模型。第一个叫做场景。第二种叫做解决方案。场景和解决方案之间存在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会神奇地解决我的设定问题。

我有两个问题。

  1. 如何让该保存工作?
  2. 我是否考虑正确添加上下文,还是有更好的方法?
  3. 所有帮助表示赞赏。

    更新:添加ScenarioCreateForm

    class ScenarioCreateForm(ModelForm):    
        class Meta:
            model = Scenario
            exclude = ('user', 'created')
    

0 个答案:

没有答案