Django - 无法设置默认的DateTimeField值

时间:2018-02-23 09:12:53

标签: python django django-models django-admin

当我在 django-admin 网站中使用 datedate_added字段保存表单时,它会在那里保存空值。我想节省当前时间。这是代码:

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

# Create your models here.

class Event(models.Model):
    def __str__(self):
        return self.title

    title = models.CharField(max_length=300)
    date = models.DateField(default=datetime.date.today, blank=True, null=True)
    date_added = models.DateTimeField(default=timezone.localtime, blank=True, null=True)
    text = models.TextField()

class EventPhoto(models.Model):
    event_id = models.ForeignKey(Event, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to='news/')

为什么default=timezone.localtime不起作用?

3 个答案:

答案 0 :(得分:1)

Django DateField为此提供了auto_now_addauto_now个参数:

date = models.DateField(auto_now=True, blank=True, null=True)
date_added = models.DateTimeField(auto_now_add=True, blank=True, null=True)

答案 1 :(得分:0)

timezone.localtime是转换函数,而不是值,这就是它无法使用的原因。

Help on function localtime in module django.utils.timezone:

localtime(value, timezone=None)
    Converts an aware datetime.datetime to local time.

    Local time is defined by the current time zone, unless another time zone
    is specified.

答案 2 :(得分:0)

我已经发现,问题在于 django-admin 。如果我使用这样的代码:

new_event = Event(title="blablah", text="some_text")
new_event.save()

然后使用DateField正确保存default=timezone.localtime。 可能 django-admin 尝试将空字符串传递给DateField,而不是触及它并让它采取默认操作。