Python Django NameError:未定义名称“datetime”

2024-06-16 12:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在应用程序目录中的命令行中键入后:

python manage.py runserver

我得到这个错误:

^{pr2}$

这个同名的question对我没有帮助。我有

from datetime import date

在我的模型.py. 在

我运行的是python3.6.5和Django 2.0.4。我刚把这个应用放到网上,它还在工作,而且模型.py完全相同。我不知道我做错了什么。最近可以把我的10个窗口重新设置吗?它删除了进程中的python安装(在我的program files目录中)和许多其他东西。
它让我的一个python单独安装。从命令行打开它并导入datetime并使用函数返回今天的日期。在

这是我的模型.py公司名称:

from django.db import models
from django.utils import timezone
from datetime import date

class Item(models.Model):

    FREEZER_DRAWERS = (
            (1, 'Kitchen: Top tray'),
            (2, 'Kitchen: Middle drawer'),
            (3, 'Kitchen: Bottom drawer'),
            )

    TYPES = (
            (1, 'Raw meat'),
            (2, 'Fruit and veg'),
            (3, 'Meal'),
            )

    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField("food", max_length=100)
    item_type = models.IntegerField(choices = TYPES, default = 1)
    added_date = models.DateField("date added", default=datetime.date.today)
    where = models.IntegerField(choices = FREEZER_DRAWERS, default = 1)
    expires_date = models.DateField(default = datetime.date.today)
    on_shopping_list = models.BooleanField()

    def __str__(self):
        return self.title

谢谢你!这是多年来我在这些论坛上无法回答的第一个问题!在


Tags: django命令行frompy模型import目录default
1条回答
网友
1楼 · 发布于 2024-06-16 12:30:37

问题是您没有导入datetime模块(或者至少没有以限定的方式):您导入了date属性。在

使用date

您可以将datetime.date替换为date(这是您需要的唯一元素):

from django.db import models
from django.utils import timezone
from datetime import date

class Item(models.Model):

    FREEZER_DRAWERS = (
            (1, 'Kitchen: Top tray'),
            (2, 'Kitchen: Middle drawer'),
            (3, 'Kitchen: Bottom drawer'),
            )

    TYPES = (
            (1, 'Raw meat'),
            (2, 'Fruit and veg'),
            (3, 'Meal'),
            )

    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField("food", max_length=100)
    item_type = models.IntegerField(choices = TYPES, default = 1)
    added_date = models.DateField("date added", default=date.today)
    where = models.IntegerField(choices = FREEZER_DRAWERS, default = 1)
    expires_date = models.DateField(default = date.today)
    on_shopping_list = models.BooleanField()

    def __str__(self):
        return self.title

执行模块的导入

或者,您可以导入模块,然后使用datetime.date

^{pr2}$

使用DateFieldauto_now_add

不管我们如何导入,事实上Django已经支持这样的默认值:with ^{} [Django-doc]:这将添加一个等于today的默认值。此外,它将使字段blank=True,和editable=False,以防止它以表单等形式出现。因此,它是完全等价的,尽管它可能是您的意思:

# Note: makes the fields blank=True, and editable=False as well.

from django.db import models
from django.utils import timezone

class Item(models.Model):

    FREEZER_DRAWERS = (
            (1, 'Kitchen: Top tray'),
            (2, 'Kitchen: Middle drawer'),
            (3, 'Kitchen: Bottom drawer'),
            )

    TYPES = (
            (1, 'Raw meat'),
            (2, 'Fruit and veg'),
            (3, 'Meal'),
            )

    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField("food", max_length=100)
    item_type = models.IntegerField(choices = TYPES, default = 1)
    added_date = models.DateField("date added", auto_now_add=True)
    where = models.IntegerField(choices = FREEZER_DRAWERS, default = 1)
    expires_date = models.DateField(auto_now_add=True)
    on_shopping_list = models.BooleanField()

    def __str__(self):
        return self.title

相关问题 更多 >