1

У меня есть CreateView, в котором мне нужно выводить данные из объекта. Он отлично работает с этим кодом нижеЗаменить get_context_data с get_object в 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()) 

но мне было интересно, если это возможно, чтобы заменить 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()) 

ответ

2

В их соответствующих названий, метод get_object возвращает один объект, который будет манипулировать представлением, в то время как get_context_data возвращает Dict, который будет отображаться в шаблоне. Так что нет, вы не можете заменить его другим, и ваш исходный код отлично подходит.

Смежные вопросы