Python ';创建表单';对象没有属性';用户';关于表单验证

Python ';创建表单';对象没有属性';用户';关于表单验证,python,django,forms,Python,Django,Forms,我试图创建一个视图,以便通过FormView将数据添加到数据库中。然而,我得到了这个没有属性的“用户”错误。我在这里找到了如何使用基于函数的视图消除它:,但是我仍然不知道如何使用基于类的视图进行同样的操作 这是我的档案: views.py: class CreateView(FormView): template_name = 'restaurant/create.html' form_class = CreateForm success_url = '' @m

我试图创建一个视图,以便通过FormView将数据添加到数据库中。然而,我得到了这个没有属性的“用户”错误。我在这里找到了如何使用基于函数的视图消除它:,但是我仍然不知道如何使用基于类的视图进行同样的操作

这是我的档案:

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)
回溯:


提前谢谢

您不应该将
方法\u decorator
表单\u 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)

您不应该将
method\u decorator
form\u 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)

你能发布完整的回溯吗?看起来好像缺少什么东西(在提供的源代码片段中),我刚刚发布了它!啊,这是
login\u所需的
decorator你能发布完整的回溯吗?看起来好像缺少什么东西(在提供的源代码片段中),我刚刚发布了它!啊,这是所需的
login\u
decorator另一个选项是使用
LoginRequiredMixin
。谢谢,这很有效,如果有人遇到同样的问题,不要忘记切换到ModelForm表单,否则CreateForm将无法从视图中保存!另一个选项是使用
LoginRequiredMixin
。谢谢,这很有效,如果有人遇到同样的问题,请不要忘记切换到ModelForm表单,否则CreateForm将无法从视图中保存!