2016-04-04 7 views
0

フォームを送信すると、空白のフォームが表示され、各フィールドに「フィールドが必要です」と表示されます。しかし、私はそれを再び記入して提出すると、それは動作します。これを行う理由は何ですか?djangoで有効なフォームを提出した後、すべてのフィールドに「フィールドが必要です」が表示されるのはなぜですか?

def forum_modules(request): 
    if request.method == 'POST': 
     pform = PostForm(data=request.POST, prefix='PostForm') 
     if pform.is_valid(): 
      new_post = pform.save(commit=False) 
      new_post.user = request.user 
      new_post.save() 

      return HttpResponse("Post was successfully added") 

    else: 
     pform = PostForm() 


    return render(request, 'forum/forum_modules.html', 'pform': pform}) 

PostForm:

class PostForm(ModelForm): 
    class Meta: 
     model = Post 
     fields = ['title', 'body'] 
     exclude = ['user'] 

Postモデル:

class Post(models.Model): 

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,) 
    title = models.CharField(max_length=100) 
    body = models.TextField() 
    date = models.DateField(auto_now_add=True, blank=True) 
    likes = models.IntegerField(default=0, blank=True) 

    def __str__(self): 
     return self.title 
+0

コードはわかりやすく表示されます。関数にブレークポイントを挿入し、各行の実行方法を追跡するには 'pdb'を使う必要があります。また別のブラウザを試してみてください。 –

+0

は 'PostForm'のコードを表示します – v1k45

答えて

1

あなたはPOSTではなく、GETにインスタンス化するときは、接頭辞を使用しています。つまり、フィールドは一致しません。投稿時に、Djangoは "PostForm"で始まるフィールド名を期待していますが、フォームの中でそれらを最初に出力しません。

なぜプレフィックスを使用しているのか分かりません。ここでは必要ないようですが、そうした場合は、POSTブロックとGETブロックの両方で使用する必要があります形。

+0

私は分かりました、ありがとうございます。今それはうまく動作:)))) – Selena

1

prefixのパラメータはFormで、GETとPOSTの両方のフォーム作成で使用するか、両方のフォームで使用しないでください。

def forum_modules(request): 
    if request.method == 'POST': 
     pform = PostForm(data=request.POST) 
     if pform.is_valid(): 
      new_post = pform.save(commit=False) 
      new_post.user = request.user 
      new_post.save() 
      return HttpResponse("Post was successfully added") 
    else: 
     pform = PostForm() 
    return render(request, 'forum/forum_modules.html', 'pform': pform}) 
関連する問題