【问题标题】:How to overwrite auto_now_add in django model如何在 Django 模型中覆盖 auto_now_add
【发布时间】:2011-06-16 14:39:26
【问题描述】:

我的模型大致是:

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,但无法弄清楚如何将初始化变量连接到脚本。

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

【问题讨论】:

    标签: django sqlite


    【解决方案1】:
    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)
    

    【讨论】:

      【解决方案2】:

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

      我觉得……

      【讨论】:

        猜你喜欢
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 2018-10-07
        • 2021-11-21
        • 1970-01-01
        相关资源
        最近更新 更多