gpt4 book ai didi

python - Django : Custom save method with queryset

转载 作者:行者123 更新时间:2023-12-01 08:41:03 27 4
gpt4 key购买 nike

我正在尝试在我的模型中创建一个自定义保存方法,我希望获得您的帮助以改进此方法。

我正在根据表单中的一些变量生成唯一代码。我生成代码并在保存之前进行研究。如果另一个文档已经获取了此代码,我会生成另一个文档,否则我会保存该对象。

这是我的 models.py 文件中的 save() 方法:

def save(self, *args, **kwargs):
import random
self.code = f"{self.publication.pub_id}-{self.language.upper()}-{self.format.upper()}-{random.randint(1,10001)}"
document = Document.objects.filter(code=self.code)
if document:
self.code = f"{self.publication.pub_id}-{self.language.upper()}-{self.format.upper()}-{random.randint(1,10001)}"
super(Document, self).save(*args, **kwargs)

我认为可以通过 while 而不是 if 条件来改进。

你对此有何看法?

谢谢

最佳答案

我使用 while 来检查我的代码是否唯一,它非常不言自明,我根据您的代码目的进行了修改:

def _get_unique_code(self):
"""

To be used only once in the save method. It creates the unique code.

"""
import random
self.code = f"{self.publication.pub_id}-{self.language.upper()}-{self.format.upper()}-{random.randint(1,10001)}"
while Document.objects.filter(code=self.code).exists():
self.code = f"{self.publication.pub_id}-{self.language.upper()}-{self.format.upper()}-{random.randint(1,10001)}"
return self.code

def save(self, *args, **kwargs):
if not self.code:
self.code = self._get_unique_code()
super(Document, self).save()

关于python - Django : Custom save method with queryset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53495700/

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