1

我有一个 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()and替换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())
4

1 回答 1

2

正如它们各自的名称所暗示的那样,该get_object方法返回要由视图操作的单个对象,同时get_context_data返回要在模板中显示的字典。所以不,你不能用另一个替换一个,你的原始代码非常好。

于 2013-04-30T13:22:57.380 回答