Django表示不将数据保存到数据库

时间:2018-02-23 09:29:22

标签: django

我正在django制作应用程序,向用户询问有关业务的一些问题,他们的答案存储在数据库中。我已在管理部分注册了该应用,可以在管理面板中看到它。

然而,在提交表单时,虽然显示了url review-sucess,但数据似乎并未保存在数据库中。管理部分没有显示插入的任何记录。

models.py

from django.db import models

yes_or_no_choices = (
    ('YES','Yes'),
    ('YES','No'),
)

class ModelReview(models.Model):
    review_date                  = models.DateTimeField()
    business_name                = models.CharField(max_length=200)
    user_review                  = models.TextField()
    user_name                    = models.CharField(max_length=50)
    photos                       = models.ImageField()

forms.py

from django import forms
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _

from . import models

class FormReview(forms.ModelForm):
    class Meta:
        model = models.ModelReview
        fields = '__all__'
        exclude = ['review_date']

views.py

from django.http import HttpResponse
from django.shortcuts import render, redirect
from . import forms


def FunctionReviewSuccess(request):
    return render(request, 'reviews/review-success.html')

def FunctionPostReview(request):
    if request == 'POST':
        instance_form = forms.FormReview(request.POST.request.FILES or None)
        if form.is_valid:
            form.save()
            return redirect ('review-sucess')

    else:
        instance_form = forms.FormReview()
    return render(request, 'reviews/post-review.html',{'prop_form':instance_form })

-review.html的交

<h1>Post a review</h1>
    <form class="review-form" action="{% url 'review-success' %}" method="post" enctype="multipart/form-data">
      {% csrf_token %}
      {{ prop_form }}
      <input type="submit" name="" value="Post Review">
    </form>

2 个答案:

答案 0 :(得分:2)

您将表单直接发布到FunctionReviewSuccess视图,该视图不对数据执行任何操作。您的表单需要由FunctionPostReview处理,该视图与首先显示表单的视图相同。所以回到同一个地方:

<form class="review-form" action="." method="post">

请注意,表单中没有任何文件,因此您可以省略enctype。

请注意,您的观点存在大量问题:

  • 您需要检查request.method,而不仅仅是请求;
  • 您拨打表单instance_form,然后查看form;
  • is_valid是一种方法而不是财产;
  • POST和FILES参数之间有一个点而不是逗号;
  • 你不应该因为与上述相同的原因接受request.FILES;
  • 当您已经在POST区块内时,不应使用or None

所以:

if request.method == 'POST':
    instance_form = forms.FormReview(request.POST)
    if instance_form.is_valid():
        instance_form.save()
        return redirect('review-sucess')

最后,Python样式是将lower_case_with_underscore用于视图等函数名称。

答案 1 :(得分:0)

请检查以下几点:

On Submit 操作定义为成功,而不是处理发布请求的视图。

正如@Daniel Roseman 所提到的,您的代码存在问题,请予以纠正。

你可以做的一件事是在调用 form.save 方法之前,你可以在控制台上打印出清理过的数据字典中的值,并检查数据中的任何差异。

if form.is_valid:
    business_name= form.cleaned_data['business_name']
    print(business_name);
    form.save()

还要检查 review_date 默认值,因为您没有在表单中包含相同的值。

review_date = models.DateTimeField()