Как перезаписать auto_now_add в модели Django - PullRequest
0 голосов
/ 16 июня 2011

У меня есть модель примерно:

class Day(models.Model):
    info = models.ForeignKey("Info")
    date = models.DateField(auto_now_add=True editable=True)
    data = models.IntegerField()

Но я хочу инициализировать модель с помощью скрипта, вставляющего данные за вчерашний день. Скрипт вызывает серию json'ов и примерно анализирует данные из них:

for info in infos:
    init = Day(info=info, date=datetime.date.today()+datetime.timedelta(-1), data=0)
    init.save()

Я прочитал в этот вопрос об идее установки модели на что-то вроде auto_now_add= not initialize, чтобы auto_now_add имел значение false при запуске сценария инициализации, но не смог выяснить, как подключить переменную инициализации к сценарию.

Может кто-нибудь объяснить мне, как перезаписать поле auto_now_add тем или иным способом. Я бы предпочел сейчас добавить другую модель, если это возможно.

Ответы [ 2 ]

2 голосов
/ 16 июня 2011
class TimeDeltaDateField(models.DateField):
    def __init__(self, verbose_name = None, name = None, time_delta, *args, **kwargs):
        self.time_delta = time_delta
        super(models.DateField, self).__init__(verbose_name, name, *args, **kwargs)

    def pre_save(self, model_instance, add):
        if self.auto_now or (self.auto_now_add and add):
            value = datetime.datetime.now() + self.time_delta
            setattr(model_instance, self.attname, value)
            return value
        else:
            return super(models.DateField, self).pre_save(model_instance, add)

попробуйте это поле и использование здесь:

  TimeDeltaNewDateField(time_delta = datetime.timedelta(-1), auto_now_add = True)
0 голосов
/ 16 июня 2011

Сохраните его, чтобы установить auto_now. Затем вы установите поле, а затем сохраните его снова.

Я думаю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...