django 表单请求 post 未加载数据
django form request post not loading data
我正在尝试将提交的数据加载到 Form
实例中,request.POST
具有有效值但表单没有。
class ArticleCreateForm(forms.Form):
title = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'autocomplete': 'off'}), label='')
tagging = forms.CharField(max_length=255, required=False, widget=forms.TextInput(attrs={'autocomplete': 'off'}), label='')
towhere = forms.CharField(max_length=20, required=False) # default to unchecked, save
class Meta:
fields = ['title', 'tagging', 'towhere']
def clean_title(self):
data = self.cleaned_data['title']
if len(data) < 3:
raise ValidationError('Title is too short')
def clean_tagging(self):
data = self.cleaned_data['tagging']
if len(data) == 0 or data is None:
raise ValidationError('Please add at least one tag')
@login_required
def articleChangeView(request, pk):
try:
article = Article.objects.get(pk=pk)
if article.author != request.user:
raise PermissionDenied()
elif request.method == 'POST':
form = forms.ArticleCreateForm(request.POST)
print('--------')
print(request.POST)
print(form.cleaned_data)
<QueryDict: {'csrfmiddlewaretoken': ['gm0ODMFud35nhHlPdBr3IHVZXgtiDQV8zGPsscGWzcpylNVd0fnray7iodJvBWyb'], 'title': ['Title'], 'tagging': ['jquery']}>
{'title': None, 'tagging': None, 'towhere': ''}
我想知道为什么会这样,如果你能帮我一把我会很高兴
你首先应该调用 form.is_valid()
[Django-doc]:
from django.shortcuts import get_object_or_404
@login_required
def articleChangeView(request, pk):
article = get_object_or_404(Article, pk=pk, author=request.user)
if request.method == 'POST':
form = forms.ArticleCreateForm(request.POST)
if <strong>form.is_valid()</strong>:
print('--------')
print(request.POST)
print(form.cleaned_data)
您的 clean_<i>fieldname</i>
的 clean
方法也应该 return 清理后的值,因此:
class ArticleCreateForm(forms.Form):
# …
def clean_title(self):
data = self.cleaned_data['title']
if len(data) < 3:
raise ValidationError('Title is too short')
<strong>return data</strong>
def clean_tagging(self):
data = self.cleaned_data['tagging']
if not data:
raise ValidationError('Please add at least one tag')
<strong>return data</strong>
我正在尝试将提交的数据加载到 Form
实例中,request.POST
具有有效值但表单没有。
class ArticleCreateForm(forms.Form):
title = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'autocomplete': 'off'}), label='')
tagging = forms.CharField(max_length=255, required=False, widget=forms.TextInput(attrs={'autocomplete': 'off'}), label='')
towhere = forms.CharField(max_length=20, required=False) # default to unchecked, save
class Meta:
fields = ['title', 'tagging', 'towhere']
def clean_title(self):
data = self.cleaned_data['title']
if len(data) < 3:
raise ValidationError('Title is too short')
def clean_tagging(self):
data = self.cleaned_data['tagging']
if len(data) == 0 or data is None:
raise ValidationError('Please add at least one tag')
@login_required
def articleChangeView(request, pk):
try:
article = Article.objects.get(pk=pk)
if article.author != request.user:
raise PermissionDenied()
elif request.method == 'POST':
form = forms.ArticleCreateForm(request.POST)
print('--------')
print(request.POST)
print(form.cleaned_data)
<QueryDict: {'csrfmiddlewaretoken': ['gm0ODMFud35nhHlPdBr3IHVZXgtiDQV8zGPsscGWzcpylNVd0fnray7iodJvBWyb'], 'title': ['Title'], 'tagging': ['jquery']}>
{'title': None, 'tagging': None, 'towhere': ''}
我想知道为什么会这样,如果你能帮我一把我会很高兴
你首先应该调用 form.is_valid()
[Django-doc]:
from django.shortcuts import get_object_or_404
@login_required
def articleChangeView(request, pk):
article = get_object_or_404(Article, pk=pk, author=request.user)
if request.method == 'POST':
form = forms.ArticleCreateForm(request.POST)
if <strong>form.is_valid()</strong>:
print('--------')
print(request.POST)
print(form.cleaned_data)
您的 clean_<i>fieldname</i>
的 clean
方法也应该 return 清理后的值,因此:
class ArticleCreateForm(forms.Form):
# …
def clean_title(self):
data = self.cleaned_data['title']
if len(data) < 3:
raise ValidationError('Title is too short')
<strong>return data</strong>
def clean_tagging(self):
data = self.cleaned_data['tagging']
if not data:
raise ValidationError('Please add at least one tag')
<strong>return data</strong>