1

我有一个CreateView,我需要从一个对象输出数据。它工作正常,下面用get_object替换get_context_data在Django 1.5中

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()) 

这个代码,但我不知道是否有可能用get_object()更换dispatch()get_context_data()。我已经尝试了下面的代码,但它并没有给我这个项目作为对象。

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()) 

回答

2

作为它们各自的名称所暗示的,所述get_object方法返回到由视图操纵的单个对象,而get_context_data返回到显示在模板的字典。所以不,你不能用另一个代替一个,你的原始代码是完全正确的。

相关问题