Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ModelForm未保存数据_Python_Django - Fatal编程技术网

Python Django ModelForm未保存数据

Python Django ModelForm未保存数据,python,django,Python,Django,我尝试了以下帖子中的解决方案: :不起作用 :不起作用 我试图将数据从模型表单保存到模型中 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.Aut

我尝试了以下帖子中的解决方案:

:不起作用

:不起作用

我试图将数据从模型表单保存到模型中

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>

但是,在重定向时,它不会将表单保存到我正在从PHPMyAdmin(使用MySQLdb)和Django管理面板检查的模型中。知道为什么吗

您正在发布到
/estimational/Thank/
,应该将其更改为您的
add_estimational
路径,以使您的视图处理该帖子。因此,解决方案是更改模板的表单标记中的
action

如果您可以发布URL.py中的相关代码,我可以提供关于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>

此外,在您的视图中验证该值也是一个好主意,因为即使该字段是隐藏的,一个有进取心、邪恶的用户仍然可以发布其他值

添加了url.py。另外,我的原始代码确实有“add_listing”这样的操作。这保存到模型中,但我想在成功时重定向到另一个url,因此我将操作更改为
推荐/感谢
太好了,我已经更新了我的答案。让我知道你进展如何。还有在views.py中要做的任何更改吗?因为我试过了,没有效果。它没有重定向到
推荐信/谢谢/
。如果有帮助,控制台中的我的表单数据如下:
已验证:
名称:保存
凭证:保存
测试:保存
提交:添加证明
确定,您可能需要在视图中使用“感谢”url名称。请参阅更新。这些似乎不起作用。你可以试试看
<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>
verified = forms.CharField(widget=forms.HiddenInput(), initial='no')