Skip to main content
 首页 » 编程设计

python之Django 表单不运行 form.is_valid

2024年08月19日38leader

我正在处理 Django 自定义表单: 我已经调试过 form.is_valid 函数没有运行,即使所有数据都出现在 View 中。

模型.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) 

表单.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> 

请帮帮我! 提前致谢!

请您参考如下方法:

试一试:

    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) 

您需要将value 属性添加到您的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> 
                                                                     <!-- ^^^^^^^^^^  -->