我有一个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())
答案 0 :(得分:2)
正如它们各自的名称所暗示的那样,get_object
方法返回由视图操纵的单个对象,而get_context_data
返回要在模板中显示的字典。所以不,你不能用另一个替换,你的原始代码就完全没问题。