使用 Django 时,save() 函数在使用模型表单时不起作用
When using Django the save() function does not work using model forms
我正在努力学习 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 %}
这是我的URL的
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),
]
我遇到的问题是,当我提交表单时,信息没有存储在数据库中。
有人可以解释一下问题出在哪里吗?
如图所示更正您的代码,这也将处理 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})
感谢您的回复。我意识到我的代码确实有效,我在使用 sqlite 命令行工具时看到了数据库中的条目。但是,我在管理 GUI 中看不到我的全部内容。感谢 bmons 提供的代码建议也有效。
我正在努力学习 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 %}
这是我的URL的
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),
]
我遇到的问题是,当我提交表单时,信息没有存储在数据库中。
有人可以解释一下问题出在哪里吗?
如图所示更正您的代码,这也将处理 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})
感谢您的回复。我意识到我的代码确实有效,我在使用 sqlite 命令行工具时看到了数据库中的条目。但是,我在管理 GUI 中看不到我的全部内容。感谢 bmons 提供的代码建议也有效。