2017-02-24 24 views
0

私は現在、Djangoでソーシャルプラットフォームを作成しています。今、ダッシュボードを開発しており、エンドユーザが自分の投稿を公開できるようにしたいと考えています。 Postモデルのためのフォーム投稿が新しい投稿オブジェクトを生成しない

class Post(models.Model): 
    user = models.ForeignKey(User) 
    posted = models.DateTimeField(auto_now_add=True) 
    content = models.CharField(max_length=150) 
    Likes = models.IntegerField(default=0) 

def __str__(self): 
    return self.user.username 

マイフォーム::

フォームが送信されます
class Post_form(forms.ModelForm): 

    class Meta: 
     model = Post 
     fields = (
      'content', 
      ] 

    def __init__(self, *args, **kwargs): 
     super(Post_form, self).__init__(*args, **kwargs) 
     self.fields['content'].label = "" 
     self.fields['content'].widget.attrs={ 
      'id': 'id_content', 
      'class': 'myCustomClass', 
      'name': 'name_content', 
      'placeholder': 'What are you thinking about?', 
     } 

が、それは正しくコンテンツフィールドの値を持つPOSTリクエストを生成し、これが私のPostモデルです。ビューにフォームを保存すると、新しい投稿は生成されません。私は間違って何をしていますか?

私のviews.py:

def dashboard_view(request): 
    if request.POST: 
     form = Post_form(data=request.POST, instance=request.user) 
     if form.is_valid(): 
      form.save() // <- no new post gets generated after saving 
      return redirect(reverse('dashboard')) 
     else: 
      return redirect(reverse('settings')) 
    else: 
     form = Post_form 
     gebruikers = User.objects.all() 
     all_posts = Post.objects.all().order_by('-posted') 
     return render(request, 'Dashboard/index.html', {'gebruiker':gebruikers, 'posts':all_posts, 'form': form},) 

答えて

1

あなたはポストフォームにインスタンスパラメータとしてユーザーを渡すことはできません。その引数を省略して、saveから返された実際のPostインスタンスでユーザーを割り当てる必要があります。

form = Post_form(data=request.POST) 
if form.is_valid(): 
    post = form.save(commit=False) 
    post.user = request.user 
    post.save() 
関連する問題