“ CreateForm”对象在表单验证中没有属性“ user”

时间:2018-09-11 09:58:53

标签: python django forms

我试图创建一个视图,以便通过FormView将数据添加到数据库中。但是,我收到此无属性“用户”错误。我在这里找到了如何使用基于函数的视图来摆脱它:MyModelForm' object has no attribute 'user using django,但是我仍然无法在基于类的视图中做到这一点。

这是我的文件:

views.py:

class CreateView(FormView):
    template_name = 'restaurant/create.html'
    form_class = CreateForm
    success_url = ''

    @method_decorator(login_required)
    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.owner = self.request.user
        obj.save()
        return super().form_valid(form)

forms.py:

class CreateForm(forms.Form):
    name = forms.CharField()
    category = forms.CharField()
    capacity = forms.IntegerField()
    description = forms.CharField(widget=forms.Textarea)

models.py:

from django.contrib.auth.models import User    
class Restaurant(models.Model):
        owner = models.ForeignKey(User, on_delete=models.CASCADE)
        name = models.CharField(max_length=200)
        category = models.CharField(max_length=200)
        description = models.TextField()
        capacity = models.IntegerField(default=0)

回溯:http://dpaste.com/2NTFS8H

谢谢!

1 个答案:

答案 0 :(得分:3)

您不应该将method_decoratorform_valid方法一起使用。将您的视图更改为此:

@method_decorator(login_required, name='dispatch')
class CreateView(FormView):
    template_name = 'restaurant/create.html'
    form_class = CreateForm
    success_url = ''

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.owner = self.request.user
        obj.save()
        return super().form_valid(form)