在Django 1.5中用get_object替换get_context_data

时间:2013-04-30 10:05:38

标签: django django-models django-views django-class-based-views generic-foreign-key

我有一个CreateView,我需要从对象输出数据。它可以正常使用下面的代码

class MyCreateView(CreateView):
    model = ModelName

    def dispatch(self, request, *args, **kwargs):
        self.project = get_object_or_404(Project, slug=kwargs['project'])
        return super(MyCreateView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, *args, **kwargs):
        context_data = super(MyCreateView, self).get_context_data(*args, **kwargs)
        context_data.update({'object': self.project})
        return context_data

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.project = self.project
        obj.save()
        return HttpResponseRedirect(self.get_success_url())

但我想知道是否可以用dispatch()替换get_context_data()get_object()。我已经尝试了下面的代码,但它并没有将项目作为对象。

class MyCreateView(CreateView):
    model = ModelName

    def get_object(self, queryset=None):
        return = Project.objects.filter(slug=self.kwargs['project'])

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.project = self.object
        obj.save()
        return HttpResponseRedirect(self.get_success_url())

1 个答案:

答案 0 :(得分:2)

正如它们各自的名称所暗示的那样,get_object方法返回由视图操纵的单个对象,而get_context_data返回要在模板中显示的字典。所以不,你不能用另一个替换,你的原始代码就完全没问题。