Django 表单不运行 form.is_valid
Posted
技术标签:
【中文标题】Django 表单不运行 form.is_valid【英文标题】:Django form doesn't runs form.is_valid 【发布时间】:2018-03-20 06:44:20 【问题描述】:我正在处理一个 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)
您需要将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>
<!-- ^^^^^^^^^^ -->
【讨论】:
你的表单有错误,我更新了答案,你可以试试 我认为这是 category_fit 单选选项的错误,如何在我的模板中使用此单选按钮?请! 我是否必须在我的 forms.py 中的'category_fit': forms.RadioSelect()
中添加一些属性?
现在它返回另一个错误:int() argument must be a string, a bytes-like object or a number, not 'Article'
很高兴为您提供帮助!您应该接受其他有相同问题的人的答案,他们将搜索解决方案【参考方案2】:
在调用 form.is_valid() 之后,调用 form.errors 并打印它以了解表单的预期输入。
form.is_valid()
print(form.errors)
或
from django.http import HttpResponse
form.is_valid()
return HttpResponse(form.errors)
【讨论】:
HttpResponse 返回 category_fit! 表示获取表单数据时category_fit字段有问题 我必须在'category_fit': forms.RadioSelect() inside my forms.py
中添加一些属性吗?
是的,您需要按照@bear brown 的建议添加值字段以上是关于Django 表单不运行 form.is_valid的主要内容,如果未能解决你的问题,请参考以下文章