📜  DateTimeField – Django 模型(1)

📅  最后修改于: 2023-12-03 14:40:38.347000             🧑  作者: Mango

DateTimeField – Django 模型

在Django的模型中,DateTimeField是一个非常有用的字段类型,它允许您在任何时间存储日期和时间,并可以进行各种操作。

DateTimeField的定义

DateTimeField需要一个必需的参数:auto_now_add。这个参数意味着当对象被创建时,当前的日期和时间将被用作字段的值。

另外一个可选参数是auto_now,它的意思是在每次保存模型记录时,都会自动设置字段的值为当前日期和时间。

以下是一个DateTimeField的定义示例:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=200)
    date_published = models.DateTimeField(auto_now_add=True, auto_now=False)
    last_modified = models.DateTimeField(auto_now=True)

在这个模型中,我们有一个Book类,它包含了title、author、date_published和last_modified这4个字段。其中,date_published字段是使用自动添加日期和时间的DateTimeField类型,而last_modified字段采用的则是自动更新日期和时间的DateTimeField类型。

DateTimeField的使用

可以使用DateTimeField存储日期和时间,并在存储和查询时执行一些操作。以下是一些可以使用的操作:

查询某个日期范围内的记录

您可以使用DateTimeField来查询一段时间内创建的记录。例如,如果您想查询一周内创建的所有图书,可以这样做:

import datetime
from django.shortcuts import render
from .models import Book

def search_books(request):
    # Get books created in last 7 days
    search_date = datetime.datetime.today() - datetime.timedelta(days=7)
    books = Book.objects.filter(date_published__gte=search_date)

    context = {'books': books}
    return render(request, 'books_list.html', context)

在上面的代码中,我们首先获取查询的日期,并将其设定为7天前。我们然后使用这个日期来查询我们的书籍模型的date_published字段,过滤出最近七天中已发布的书籍。

注意,这里的date_published__gte是用于查询的Django ORM查询过滤器,意思是大于或等于指定日期的书籍。

格式化输出日期和时间

你可以使用Django的模板语言,在模板中对日期和时间进行格式化。使用datetime过滤器,你可以将日期和时间呈现在模板中的任何形式,例如:

{% for book in books %}
    <p>{{ book.title }} was published on {{ book.date_published|date:"F j, Y" }} at {{ book.date_published|time:"g:i a" }}</p>
{% endfor %}

在上面的代码中,我们使用了datetime过滤器将日期和时间分别格式化为“月份 日, 年”和“小时:分钟 AM/PM”的形式。

转换为字符串并解析为日期

您可以使用Python的strftime()方法将一个DateTimeField值转换为字符串,并传递一个自定义格式。如果你有一个设置为auto_now_add或auto_now的DateTimeField字段,你也可以使用str()将其转换为字符串。

from datetime import datetime
from .models import Book

my_date = datetime.now()
print(my_date.strftime("%Y-%m-%d %H:%M:%S"))

book = Book.objects.get(pk=1)
print(str(book.date_published))

在上面的代码中,我们首先使用strftime()方法将当前日期转换为“年-月-日 时:分:秒”的格式,然后使用str()方法将一个自动添加日期和时间的DateTimeField值转换为字符串。

总结

DateTimeField是一个强大的Django模型字段类型,它可以帮助您存储和操作日期和时间。你可以使用它来查询某个日期范围内的记录,格式化输出日期和时间,以及将日期和时间转换为字符串。