2014-05-15 64 views
1

我从以下职位试图解决方案:的Django的ModelForm不保存数据

Saving data from ModelForm:没有工作

ModelForm data not saving django:没有工作。

我试图将数据从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管理面板。任何想法为什么?

回答

2

您正在发布到/testimonials/thanks/应更改为您的add_testimonial路线,让您的视图处理POST。因此,解决方案是更改模板的表单标记中的action值。

如果您可以从您的urls.py发布相关代码,我可以提供关于action属性的值应该更具体的答案。

更新

当一个有效的形式发布在重定向将在您的视图发生。更改模板的action属性值设置为:

<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') 

而且,这将是验证,因为即使该字段是隐藏在您的视图中的值是一个好主意,一个积极进取的,不幸的用户仍然可以发布其他值。

+0

添加了urls.py.另外,我原来的代码确实有'add_listing'的动作。这保存到模型,但我想重定向到另一个成功的网址,所以我改变了行动,以'感谢/谢谢' – Newtt

+0

太棒了,我已经更新了我的答案。让我知道你如何相处。 – Fiver

+0

以及在views.py中所做的任何更改吗?因为我试过这个,没有任何效果。它没有重定向到'推荐/谢谢/'。如果有帮助,我在控制台中的表格数据如下:'验证:' 'name:Save' 'credentials:Save' 'test:Save' 'submit:Add testimonial' – Newtt

相关问题