Django中form.cleaned_data失效,表单is_valid验证不通过求助
Let's break down the most likely reasons your form isn't passing validation and how to fix them:
1. Your view isn't handling POST submissions properly
Right now, your view creates a fresh form with initial data every time it's called—even when the user submits the form. This means the form never gets bound to the POST data from the submission, so form.is_valid() will always return False.
Fix this by checking the request method and only binding the form to POST data when the user submits:
def kw(request): ans = "this is the default value" # Remove the global form line—it's unnecessary and can cause unexpected behavior if request.method == 'POST': # Bind the form to POST data when submitting form = NameForm(request.POST) if form.is_valid(): print("helooo") d = form.cleaned_data['C'] print("the value of d =", d) # Optional: Redirect after successful submission to prevent duplicate posts # return redirect('your-success-url') else: # Show initial form for GET requests form = NameForm(initial={'C': ans}) return render(request, 'keyword.html', {'form': form})
2. Invalid syntax in your form widget
Your NameForm has a syntax error in the Textarea widget line—forms.Textarea... with ellipses is invalid Python. Replace it with a properly instantiated widget:
from django import forms class NameForm(forms.Form): # Fix the widget syntax—add parentheses and any desired attributes C = forms.CharField(widget=forms.Textarea()) # Example with custom attributes: # C = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'cols': 50}))
3. Your template might be missing critical form elements
Make sure your keyword.html template uses the POST method and includes Django's CSRF token (required for all POST forms):
<form method="POST"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form>
These fixes should resolve the validation issue and get your print statements executing when the form is submitted correctly.
内容的提问来源于stack exchange,提问作者Learn Everyday

