Django forms 不显示auto_now时间字段

Django forms 不显示auto_now时间字段

Django forms 不显示auto_now时间字段

在Django中,我们经常会使用模型来存储数据,而使用表单来处理前端用户输入的数据。在某些情况下,我们希望在创建或更新模型实例时自动设置时间字段为当前时间,这时可以使用Django的auto_now选项来实现。但是,有时候我们并不希望在表单中显示这个时间字段。

本文将详细介绍如何在Django中定义模型时使用auto_now选项,并在表单中不显示这个时间字段。我们将通过一个简单的示例来演示这个过程。

定义模型

首先,我们需要定义一个包含时间字段的模型,并使用auto_now=True选项来自动设置时间字段为当前时间。在这个示例中,我们定义一个名为Post的模型,其中包含titlecontent字段,以及一个用于记录创建时间的created_at字段:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

在上面的代码中,我们定义了一个简单的Post模型,并使用auto_now=True选项为created_at字段设置了自动当前时间。

创建表单

接下来,我们需要创建一个表单来处理用户输入的数据。在这个示例中,我们定义一个名为PostForm的表单,用于用户输入titlecontent字段:

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

在上面的代码中,我们定义了一个简单的PostForm表单,并指定了要显示的字段为titlecontent。但是,由于我们没有指定created_at字段,它将不会显示在表单中。

视图函数

接下来,我们需要创建一个视图函数来处理表单的提交,并保存数据到数据库中。在这个示例中,我们定义一个名为create_post的视图函数:

from django.shortcuts import render, redirect
from .forms import PostForm

def create_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = PostForm()
    return render(request, 'create_post.html', {'form': form})

在上面的代码中,我们处理了表单的提交,并将数据保存到数据库中。如果用户提交的数据有效,我们将重定向到post_list页面。

模板

最后,我们需要创建一个模板来呈现表单给用户。在这个示例中,我们创建一个名为create_post.html的模板:

<!DOCTYPE html>
<html>
<head>
    <title>Create Post</title>
</head>
<body>
    <h1>Create Post</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit">
    </form>
</body>
</html>

在上面的代码中,我们使用form.as_p将表单字段以<p>标签形式显示在页面上。

运行结果

现在,我们已经完成了整个流程。当用户访问/create_post页面时,他们将看到一个表单,其中包含titlecontent字段。用户填写表单并提交后,数据将保存到数据库中,同时created_at字段将自动设置为当前时间。

在这个示例中,我们成功地使用了Django的auto_now选项为模型设置了一个自动设置时间字段,并在表单中不显示这个字段。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程