使用没有表单的Django CreateView来创建对象

时间:2011-06-03 02:03:43

标签: django-models django-views django-class-based-views

我正在使用django 1.3的基于分类的视图,并试图找出如何在不使用表单的情况下创建对象。我不需要任何用户输入来创建对象,但我仍然收到模板丢失的错误消息。下面是我当前的视图,我试图继承form_valid方法,但它不起作用。任何帮助将不胜感激。

class ReviewerCreateView(CreateView):
    model = Reviewer

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.role = 2
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())

2 个答案:

答案 0 :(得分:5)

CreateView是一个专门的视图,其目的是在GET上显示一个表单并验证表单数据并根据POST上的表单数据创建一个新对象。

由于您不需要显示表单并处理表单数据,因此CreateView不适合您的工作。

您需要一个基于功能的普通视图,或者,如果您更喜欢使用基于类的视图,则从View派生并覆盖get()post()。例如,调整示例代码:

class ReviewerCreator(View):
    def get(self, request, *args, **kwargs):
         Reviewer(user=request.user, role=2).save()
         return HttpResponseRedirect('/your_success_url/')

答案 1 :(得分:-1)

如果视图不需要,我认为视图不需要对表单进行任何明确的操作。

您可以实例化Reviewer对象。它只是一个python对象。

class ReviewerCreateView(CreateView):
    model = Reviewer

    self.object.user = self.request.user
    self.object.role = 2
    self.object.save()
    return HttpResponseRedirect(self.get_success_url())