【问题标题】:Django save method fails silentlyDjango 保存方法静默失败
【发布时间】:2015-11-03 07:46:29
【问题描述】:

我有一个类似这样的模型

class UserAttributes(models.Model):

uuid                = models.CharField(max_length=63, null=True,blank=True)
user                = models.OneToOneField(User)
activation_date     = models.DateTimeField(null=True, blank=True)
mobile_number       = models.CharField(max_length=20, null=True, blank=True)
created_date        = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return '{0} - {1}'.format(self.user.id, self.user.get_full_name())

def save(self, *args, **kwargs):

    if not self.pk:
        self.uuid = uuid.uuid4().hex
        return super(UserAttributes, self).save(*args, **kwargs)

我已经覆盖了保存方法。但是,在我看来,当我手动执行类似的操作时

attributes.activation_date = timezone.now()
attributes.save()

字段activation_date 的值永远不会写入数据库。这是我第一次面临这样的问题。没有引发异常。有人可以指出这里可能到底是什么情况。

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    我注意到,在某些情况下,您不会在模型保存中调用 super。应该是这样的

    def save(self, *args, **kwargs):
    
        if not self.pk:
            self.uuid = uuid.uuid4().hex
        return super(UserAttributes, self).save(*args, **kwargs)
    

    所以,当对象被更新时,save 不会被调用,因此数据不会被更新。

    【讨论】:

    • 完美的指针,非常感谢我错过了,是的,所以说我不能在 11 分钟之前接受答案,所以请稍等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多