如何在django模型中覆盖auto_now_add

时间:2011-06-16 14:39:27

标签: django sqlite

我有一个大致的模型:

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()

我在this中读到了关于将模型设置为auto_now_add= not initialize之类的想法的问题,以便在运行初始化脚本时auto_now_add将为false但无法弄清楚如何连接initialize变量到剧本。

任何人都可以向我解释如何通过这种方式或其他方式覆盖auto_now_add字段。如果可能的话,我现在更愿意添加另一个模型。

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:-5)

保存,以便设置auto_now。然后设置该字段,然后再次保存。

我想......