Reputation: 2067
I'm trying to make a form where user can submit a post/article.
I have this model:
class Post(models.Model):
title = models.CharField(max_length=150)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
This form:
class PostForm(forms.ModelForm):
title = forms.CharField(required=True)
content = forms.CharField(widget=forms.Textarea)
class Meta:
model = Post
fields = ['title', 'content']
And this view:
class PostCreateView(FormView):
form_class = PostForm
template_name = 'template/create_post.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
response = super(PostCreateView, self).form_valid(form)
form.user = self.request.user
form.save()
return response
I've set the user, but I'm still getting
IntegrityError at /new-post/
NOT NULL constraint failed: cyth_post.user_id
Here's the full traceback call: http://dpaste.com/0PJSTY2
What am I doing wrong here?
Thanks in advance for answers!
Upvotes: 0
Views: 1134
Reputation:
You need set form.instance
user and then run super
def form_valid(self, form):
form.instance.user = self.request.user
return super(PostCreateView, self).form_valid(form)
Upvotes: 3