Гарантируется ли Django одинаковые временные метки для auto_now и auto_now_add? - PullRequest
1 голос
/ 13 декабря 2011

Предположим, у меня есть модель Django со следующими полями:

class Gizmo(models.Model):
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)

Когда я создаю гизмо, могу ли я быть уверен, что Django сгенерирует идентичные временные метки для двух полей? Я обеспокоен тем, что Django может создать экземпляр datetime для каждого, и что они будут производить немного разные временные метки. Важно, чтобы временные метки были идентичны, чтобы был надежный способ определить, была ли обновлена ​​гизмо (то есть было ли разное время).

1 Ответ

3 голосов
/ 13 декабря 2011

На основании одного теста я могу сказать вам, что ответ - нет.

test = TestModel.objects.create()
print test.date_created
# Out: datetime.datetime(2011, 12, 12, 20, 51, 41, 620985)
print test.date_last_modified
# Out: datetime.datetime(2011, 12, 12, 20, 51, 41, 621008)

Я бы просто переопределил метод сохранения в вашей модели и сам заполнил эти значения.

PS: Сначала я просто посмотрел код поля, но в итоге просто выполнил реальный тест, так как я не знал бы, выполняет ли где-нибудь django что-то на уровне модели, если есть два поля типа auto_now или что-то в этом роде.

# datetimefield
def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = datetime.datetime.now()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super(DateTimeField, self).pre_save(model_instance, add)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...