【问题标题】:Replace get_context_data with get_object in Django 1.5在 Django 1.5 中用 get_object 替换 get_context_data
【发布时间】:2013-04-24 05:13:54
【问题描述】:

我有一个 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())

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2017-05-12
      • 2013-05-12
      相关资源
      最近更新 更多