[英]Django ModelForm not saving data
我嘗試過以下帖子的解決方案:
從ModelForm保存數據 :沒有用
我正在嘗試將ModelForm中的數據保存到模型中。
models.py:
class Testimonials(models.Model):
name = models.CharField(max_length=128)
credentials = models.CharField(max_length=128)
test = models.CharField(max_length=2000)
id = models.AutoField(primary_key=True)
NO = 'NO'
YES = 'YES'
APPROVAL = ((NO, 'no'), (YES, 'yes'))
verified = models.CharField(choices=APPROVAL, default=NO, max_length=3) #Field for making sure only verified testimonials are displayed
def __unicode__(self):
return self.id
forms.py:
class TestimonialForm(forms.ModelForm):
name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter your name'}), required=True)
credentials = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter your designation'}), required=True)
test = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control test-form-area', 'placeholder': 'Testimonial', 'rows': '5'}), required=True)
verified = forms.ChoiceField(widget=forms.HiddenInput())
class Meta:
model = Testimonials
views.py
def add_testimonial(request):
context = RequestContext(request)
if request.method == 'POST':
form = TestimonialForm(request.POST)
if form.is_valid():
form.save(commit=True)
return HttpResponseRedirect('/testimonials/thanks/')
else:
print form.errors
else:
form = TestimonialForm()
return render_to_response('templates/add_testimonial.html', {'form': form}, context)
模板:
<form id="testimonial_form" method="POST" action="/testimonials/thanks/">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.help_text}}
{{ field }}
{% endfor %}
<input type="submit" name="submit" value="Add testimonial" class="btn btn-info test-button"/>
</form>
編輯:
urls.py
url(r'^testimonials/all/', views.testimonials, name='testimonial'),
url(r'^testimonials/thanks/', views.testimonials_thanks, name='testimonial_thanks'),
url(r'^add_testimonial', views.add_testimonial, name='add_testimonial'),
但是,在重定向時,它不會將表單保存到我正在從PHPMyAdmin(使用MySQLdb)和Django Admin面板檢查的模型中。 知道為什么嗎?
您正在發帖/testimonials/thanks/
應該更改為您的add_testimonial
路線,讓您的視圖處理POST。 因此,解決方案是更改模板表單標記中的action
值。
如果您可以發布urls.py中的相關代碼,我可以提供一個更具體的答案,說明action屬性的值應該是什么。
更新
當有效表單被POST時,重定向將在您的視圖中發生。 將模板的操作屬性值更改為:
<form id="testimonial_form" method="POST" action="{% url 'add_testimonial' %}">
在你看來:
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('testimonial_thanks'))
並確保在視圖中包含以下導入:
from django.core.urlresolvers import reverse
更新2
在模板中顯示表單錯誤:
<form id="testimonial_form" method="POST" action="{% url 'add_testimonial' %}">
{% csrf_token %}
{% if form.non_field_errors %}
<div class="form-group text-error">
{{ form.non_field_errors }}
</div>
{% endif %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.help_text}}
{{ field }}
{% if field.errors %}
<span>{{ field.errors|striptags }}</span>
{% endif %}
{% endfor %}
<input type="submit" name="submit" value="Add testimonial" class="btn btn-info test-button"/>
</form>
更新3
現在您可以看到表單錯誤,您需要將默認值提供給隱藏字段,如果用戶沒有選擇(它隱藏了!),則無需將其設置為ChoiceField。 因此,將verified
表單字段更改為:
verified = forms.CharField(widget=forms.HiddenInput(), initial='no')
此外,驗證視圖中的值是一個好主意,因為即使該字段被隱藏,一個有進取心,邪惡的用戶仍然可以POST其他值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.