使用 Django 时,save() 函数在使用模型表单时不起作用
Posted
技术标签:
【中文标题】使用 Django 时,save() 函数在使用模型表单时不起作用【英文标题】:When using Django the save() function does not work using model forms 【发布时间】:2020-03-28 08:14:00 【问题描述】:我正在尝试学习 Django。我相信我的表单工作正常,但数据没有保存到数据库中。
这是我的模型:
from django.db import models
# Create your models here.
class parameters(models.Model):
interval_1 = models.PositiveIntegerField()
interval_2 = models.PositiveIntegerField()
interval_3 = models.PositiveIntegerField()
interval_4 = models.PositiveIntegerField()
interval_5 = models.PositiveIntegerField()
interval_6 = models.PositiveIntegerField()
cost_1 = models.DecimalField(max_digits=19, decimal_places=2)
cost_2 = models.DecimalField(max_digits=19, decimal_places=2)
cost_3 = models.DecimalField(max_digits=19, decimal_places=2)
cost_4 = models.DecimalField(max_digits=19, decimal_places=2)
cost_5 = models.DecimalField(max_digits=19, decimal_places=2)
cost_6 = models.DecimalField(max_digits=19, decimal_places=2)
这是我的表格:
from django import forms
from django.forms import ModelForm
from .models import parameters
# Create your forms here.
class set_parameters(forms.ModelForm):
class Meta:
model = parameters
fields = "__all__"
这是我的看法:
from django.shortcuts import render
# Create your views here.
from .models import parameters
from .forms import set_parameters
def frequence_create_view(request):
form = set_parameters(request.POST or None)
if form.is_valid():
form.save()
print(request)
print(form)
form = set_parameters()
else:
print (form.errors)
context =
'form': form
return render(request, 'settings/settings.html', context)
这些是我的模板:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
% block frequence %
% endblock %
% block cost %
% endblock %
</body>
</html>
% extends 'base.html' %
% block frequence %
<form action='.' method='POST'> % csrf_token %
form.as_p
<input type='submit' value='save' />
</form>
% endblock %
这是我的网址
from django.contrib import admin
from django.urls import path
from settings.views import frequence_create_view
urlpatterns = [
path('admin/', admin.site.urls),
path('frequence_create/', frequence_create_view),
]
我遇到的问题是,当我提交表单时,信息没有存储在数据库中。
有人能解释一下问题是什么吗?
【问题讨论】:
您是否发现任何表单错误? 【参考方案1】:如图所示更正您的代码,这也将处理 get 请求
def frequence_create_view(request):
if request.method == "POST":
form = set_parameters(request.POST or None)
if form.is_valid():
form.save()
return redirect('/')
else:
form = set_parameters()
return render(request, 'your.html', 'form': form)
【讨论】:
【参考方案2】:感谢您的回复。我意识到我的代码确实有效,我在使用 sqlite 命令行工具时看到了我在数据库中的条目。但是,我在管理 GUI 中看不到我的全部内容。感谢 bmons 的代码建议,它也有效。
【讨论】:
以上是关于使用 Django 时,save() 函数在使用模型表单时不起作用的主要内容,如果未能解决你的问题,请参考以下文章
何时在 django 中使用 pre_save、save、post_save?
Django:如何使用 pre_save 信号更新模型实例?