使用 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中写入数据时给密码加密

何时在 django 中使用 pre_save、save、post_save?

在Django中使用F()函数

Django:如何使用 pre_save 信号更新模型实例?

Django 在“model.save()”之后不更新 HTML 模板

Django signal 信号机制的使用