python - Django 保存方法静默失败

标签 python django django-models django-orm

我有一个类似这样的模型

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)

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

关于python - Django 保存方法静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31935761/

相关文章:

python - 有没有办法在 Pyspark 中动态猜测架构?

python - 使用列表选择器就地添加

python - 返回列表的所有 "positions"

python - mysql django 的 NULL 和 FALSE 是否相同?

mysql - 如何在 Django 中查询时减少数据库命中次数

python - 值错误 : Field 'id' expected a number but got 'super' . [04/4/2020 18:15:11] "GET/super_user HTTP/1.1"500 132224

python - 用Python中另一个列表中的项目替换满足某些条件的列表元素

django - GeoDjango 在基于 docker python alpine 的图像上找不到 gdal

django - 在 Django 查询比较中使用变量而不是字段名

django - 如何将 db_index=True 添加到 django auth_user 的电子邮件字段