我正在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>
答案 0 :(得分:2)
您将表单直接发布到FunctionReviewSuccess视图,该视图不对数据执行任何操作。您的表单需要由FunctionPostReview处理,该视图与首先显示表单的视图相同。所以回到同一个地方:
<form class="review-form" action="." method="post">
请注意,表单中没有任何文件,因此您可以省略enctype。
请注意,您的观点存在大量问题:
request.method
,而不仅仅是请求; instance_form
,然后查看form
; is_valid
是一种方法而不是财产; 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()