2017-08-19 3 views
0

ユーザーが投稿/記事を投稿できるフォームを作成しようとしています。ユーザーがrequest.userであるModelForm

私は、このモデルを持っている:

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

この形式:

class PostForm(forms.ModelForm): 
    title = forms.CharField(required=True) 
    content = forms.CharField(widget=forms.Textarea) 

    class Meta: 
     model = Post 
     fields = ['title', 'content'] 

そして、このビュー:

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 

私は、ユーザーが設定したが、私はまだ取得しています

は、私がここで間違って何をやっている: NOT NULL constraint failed: cyth_post.user_id

ここで完全なトレースバックコールがですか?

お返事ありがとうございます!

答えて

2

あなたはうわー、それは私が探していたものだform.instanceユーザーを設定し、スーパー

def form_valid(self, form): 
    form.instance.user = self.request.user 
    return super(PostCreateView, self).form_valid(form) 
+0

を実行する必要があります。なぜ、form.userの代わりにform.instance.userですか? – ShadowXsc

+1

フォームには属性userはありませんが、インスタンスはモデルオブジェクトであり、ユーザ –

+0

ありがとうございます。今、私は分かる。 – ShadowXsc

関連する問題