2017-10-09 3 views
0

Je travaille sur un formulaire personnalisé Django: J'ai débogué que la fonction form.is_valid ne fonctionne pas même si toutes les données sont dans la vue.Le formulaire Django ne s'exécute pas form.is_valid

models.py

choices = (
    ('yes', 'Yes'), 
    ('no', 'No'), 
    ('not sure', 'Not Sure'), 
) 
class TaggedArticle(models.Model): 
    user = models.ForeignKey(User, related_name='tagging') 
    category_fit = models.CharField(choices=choices, max_length=255) 
    article = models.ForeignKey(Article, related_name='articles') 
    relevant_feedback = models.TextField(blank=True) 
    created_at = models.DateTimeField(default=timezone.now, editable=False) 

forms.py

class TagForm(forms.ModelForm): 
    class Meta: 
     model = TaggedArticle 
     fields = ('user', 'category_fit', 'article', 'relevant_feedback') 
     widgets = { 
      'category_fit': forms.RadioSelect() 
     } 

views.py

def post(self, request, *args, **kwargs): 
    if request.method == 'POST': 
     post_data = request.POST.copy() 
     post_data.update({'user': request.user.pk}) 
     form = forms.TagForm(post_data) 
     print('request recieved') 
     if form.is_valid(): 
      tag = TaggedArticle() 
      tag.user = request.user 
      article = Article.objects.all().filter(id=form.cleaned_data['article']) 
      tag.category_fit = form.cleaned_data['category_fit'] 
      tag.article = article 
      tag.relevant_feedback = form.cleaned_data['relevant_feedback'] 
      tag.save() 

     return HttpResponse('Tagged Successfully!', status=200) 

Mise à jour Je pense qu'il est l'erreur boutons radio: Voici comment je reçois cela de mon modèle:

<td><label class="radio-inline"><input type="radio" name="category_fit">Yes</label></td> 
<td><label class="radio-inline"><input type="radio" name="category_fit">No</label></td> 
<td><label class="radio-inline"><input type="radio" name="category_fit">Not Sure</label> 

Aidez-moi, s'il vous plaît! Merci d'avance!

Répondre

1

Essayez-:

if form.is_valid(): 
     tag = form.save(commit=False) 
     tag.user = request.user 
     tag.save() 
    else: 
     # Added else statment 
     msg = 'Errors: %s' % form.errors.as_text() 
     return HttpResponse(msg, status=400) 

vous devez ajouter à votre value attr radio:

<td><label class="radio-inline"><input type="radio" name="category_fit" value="yes">Yes</label></td> 
<td><label class="radio-inline"><input type="radio" name="category_fit" value="no">No</label></td> 
<td><label class="radio-inline"><input type="radio" name="category_fit" value="not sure">Not Sure</label> 
                    <!-- ^^^^^^^^^^ --> 
+0

Salut, @Bear! il renvoie une erreur de cible! –

+0

votre formulaire a une erreur, j'ai mis à jour la réponse, vous pouvez l'essayer –

+0

je pense que c'est l'erreur de l'option radio category_fit, comment puis-je utiliser cette radio boutons dans mon modèle? S'il vous plaît! –

1

Après appel form.is_valid(), appelez form.errors et impression que de connaître l'attend entrée dans le formulaire.

form.is_valid() 
print(form.errors) 

ou

from django.http import HttpResponse 

form.is_valid() 
return HttpResponse(form.errors) 
+0

HttpResponse return category_fit! –

+0

cela signifie qu'il y a un problème avec le champ category_fit lors de l'obtention des données de formulaire –

+0

dois-je ajouter des attributs dans ''category_fit': forms.RadioSelect() à l'intérieur de mon formulaire. –