user162119
user162119

Reputation: 43

'CreateForm' object has no attribute 'user' on form validation

I'm trying to create a view in order to add data to my database through a FormView. However I'm getting this no attribute 'user' error. I found how to get rid of it with a function-based view here : MyModelForm' object has no attribute 'user using django , however I still don't get how to do the same with my class-based view.

Here are my files :

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)

traceback : http://dpaste.com/2NTFS8H

Thanks in advance !

Upvotes: 0

Views: 305

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

You are not supposed to use method_decorator with form_valid method. Change your view to this:

@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)

Upvotes: 3

Related Questions