Django bug - auto_now_add字段为Null

时间:2015-01-29 22:47:32

标签: mysql django django-models

我的模型有一个自定义主键和一个带有auto_now_add = True的DateTimefield:

slug = models.CharField(max_length=5, primary_key=True)
created_on = models.DateTimeField(auto_now_add=True)

我注意到几百个中的一些对象的值为#34; created_on",即使此字段不允许Null值。任何想法如何可能?

此密钥是通过此自定义保存覆盖随机生成的:

def save(self, *args, **kwargs):
    if self.slug == '':
        self.slug = generate_random_slug()
    while True:
        try:
            super(MyClass, self).save(*args, **kwargs)
            break
        except IntegrityError:
            self.slug = generate_random_slug()

1 个答案:

答案 0 :(得分:2)

如果您尝试保存具有primary_key=True字段且另一个字段auto_now_add=True的对象,其中数据库中已存在具有相同主键值的对象,则会导致错误由DB抛出或者可能只是将其设置为null。看起来你最有可能在你的slug中发生碰撞(看起来它是5个字符长,很容易产生碰撞)。您可能希望使用具有较低碰撞概率的generate_random_slug。像uuid这样的东西可能很有用。

这是一个假设,需要查看更多代码才能确认。