Skip to main content
 首页 » 编程设计

python之Django 保存方法静默失败

2025年05月04日49tintown

我有一个类似这样的模型

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 的值永远不会写入数据库。这是我第一次遇到这样的问题。没有出现异常。有人可以指出这里到底是什么情况吗。

请您参考如下方法:

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

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

以防万一,当对象更新时保存没有被调用,因此数据没有更新。