Reputation: 43
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
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