2017-10-09 49 views
0

我正在使用Django自定义窗体: 我调试过那个form.is_valid函数没有运行,即使所有的数据都进入了视图。Django窗体无法运行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) 

更新 我认为这是单选按钮错误: 以下是我最模板得到这个:

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

请帮助我! 在此先感谢!

回答

1

试试:

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) 

需要ATTR添加valueradio

<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

嗨,@Bear!它返回目标错误! –

+0

您的表单有错误,我更新了答案,您可以试试 –

+0

我认为这是category_fit radio选项的错误,我如何在我的模板中使用这个单选按钮?请! –

1

调用form.is_valid(后),调用form.errors和打印,要知道预期输入到表单。

form.is_valid() 
print(form.errors) 

from django.http import HttpResponse 

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

HttpResponse return category_fit! –

+0

这意味着category_fit字段存在一些问题,而获取表单数据 –

+0

是否必须在“category_fit”中添加一些属性:forms.RadioSelect()在我的forms.py中? –