gpt4 book ai didi

python - 使用 UUIDField 作为主键时如何判断模型实例是否是新的

转载 作者:太空狗 更新时间:2023-10-30 01:00:34 25 4
gpt4 key购买 nike

我有一个模型需要一些后处理(我生成了 body 字段的 MD5)。

models.py

class MyModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
body = models.TextField()
md5 = models.CharField(max_length=32)
...

def save(self, *args, **kwargs):
if self.pk is None: # Only for create (edit disabled)
self.md5 = get_md5(self.body)
super(MyModel, self).save(*args, **kwargs)

问题是最后一个 block 不会执行,因为我没有看到检查实例是否是新实例的方法:self.pk 永远不会是 None 因为在保存之前填充了一个 UUID。

我想知道处理此问题的最佳做法是什么。

提前致谢。

更新:

我能想到的唯一解决方案是直接调用数据库并:

  1. 检查id是否存在
  2. 比较 modifiedcreated 字段以判断它是否是编辑

最佳答案

编辑

self.pk is never None because a UUID is populated before saving.

不是为 id 设置默认值,而是使用一种方法为新实例设置 id

class MyModel(...):
id = models.UUIDField(primary_key=True, default=None,...)

def set_pk(self):
self.pk = uuid.uuid4()

def save(self, *args, **kwargs):
if self.pk is None:
self.set_pk()
self.md5 = get_md5(self.body)
super(MyModel, self).save(*args, **kwargs)

关于python - 使用 UUIDField 作为主键时如何判断模型实例是否是新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34283205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com