使用不带表单的Django CreateView创建对象

the*_*eve 2 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())
Run Code Online (Sandbox Code Playgroud)

taw*_*mas 6

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/')
Run Code Online (Sandbox Code Playgroud)

  • 使用 GET 方法在后端创建资源是不好的做法。应该使用 POST/PUT/PATCH (3认同)