2016-04-04 15 views
0

Formu gönderdiğimde, boş bir form görüntüler ve her alan için "alan gerekli" diyor. Ama tekrar doldurup gönderdiğimde işe yarıyor. Bunu yapmasının herhangi bir sebebi var mı?Django'da geçerli bir form gönderdikten sonra neden her alan için "Alan gerekli"?

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: GET Otomatik sınama üzerinde örneğini zaman bir önek kullanıyorsanız

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

Kod bana uygun görünüyor. İşlevinize bir kesme noktası eklemek ve her satırın nasıl yürütüldüğünü izlemek için 'pdb' kullanmanız gerekir. Ayrıca başka bir tarayıcıyı da deneyin. –

+0

'PostForm' kodunun – v1k45

cevap

1

değil:

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

Mesaj modeli. Bu, alanların uyuşmadığı anlamına gelir; Gönderme sırasında Django, "PostForm" ile başlayan alan adlarını bekliyor, ancak başlangıçta formda olanlar çıkmıyor.

Neden bir önek kullandığınızı bilmiyorum - burada gerekli görünmüyor - ancak bunu yaparsanız, bunu başlattığınızda hem POST hem de GET bloklarında kullanmanız gerekir. form.

+0

kodunu görüyorum, açıklama için teşekkürler. Şimdi iyi çalışıyor :)))) – Selena

1

Form'daki prefix parametresi, hem GET hem de POST form oluşturmalarında kullanın ya da her iki formda da kullanmayın.

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}) 
İlgili konular