Джанго auto_now и auto_now_add - PullRequest
       113

Джанго auto_now и auto_now_add

235 голосов
/ 15 ноября 2009

Для Джанго 1.1.

У меня есть это в моем models.py:

class User(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

При обновлении строки я получаю:

[Sun Nov 15 02:18:12 2009] [error] /home/ptarjan/projects/twitter-meme/django/db/backends/mysql/base.py:84: Warning: Column 'created' cannot be null
[Sun Nov 15 02:18:12 2009] [error]   return self.cursor.execute(query, args)

Соответствующая часть моей базы данных:

  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,

Это повод для беспокойства?

Дополнительный вопрос: в моем инструменте администратора эти два поля не отображаются. Это ожидается?

Ответы [ 12 ]

1 голос
/ 28 февраля 2014

auto_now=True не работал для меня в Django 1.4.1, но приведенный ниже код спас меня. Это для даты и времени с учетом часового пояса.

from django.utils.timezone import get_current_timezone
from datetime import datetime

class EntryVote(models.Model):
    voted_on = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        self.voted_on = datetime.now().replace(tzinfo=get_current_timezone())
        super(EntryVote, self).save(*args, **kwargs)
0 голосов
/ 21 мая 2013

Вот ответ, если вы используете юг и хотите по умолчанию указать дату добавления поля в базу данных:

Выберите вариант 2 затем: datetime.datetime.now ()

выглядит так:

$ ./manage.py schemamigration myapp --auto
 ? The field 'User.created_date' does not have a default specified, yet is NOT NULL.
 ? Since you are adding this field, you MUST specify a default
 ? value to use for existing rows. Would you like to:
 ?  1. Quit now, and add a default to the field in models.py
 ?  2. Specify a one-off value to use for existing columns now
 ? Please select a choice: 2
 ? Please enter Python code for your one-off default value.
 ? The datetime module is available, so you can do e.g. datetime.date.today()
 >>> datetime.datetime.now()
 + Added field created_date on myapp.User
...