Python Django 3模型中的动态默认值
也有类似的问题,但没有一个是基于Django 3的最新问题,所以这里是: 我使用生成一些独特的ID,因此在我的模型中Python Django 3模型中的动态默认值,python,django,Python,Django,也有类似的问题,但没有一个是基于Django 3的最新问题,所以这里是: 我使用生成一些独特的ID,因此在我的模型中 from nanoid import generate 然后 class Work(models.Model): title = models.CharField(max_length=200) body = models.TextField() published = models.BooleanField(False) date = mode
from nanoid import generate
然后
class Work(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
published = models.BooleanField(False)
date = models.DateTimeField()
nanoid = models.CharField(max_length=15, default = generate(size=10) )
def __str__ (self):
return self.title
我的目标是确保每次添加新的工作帖子时都会生成一个新的nanoid。目前是相同的重复每次我试图通过管理添加一个新的工作
我读了一些关于创建自定义类的回复,但我在这里有点不知所措 您可以覆盖模型上的save方法来完成此操作,还必须创建一个helper函数来检查模型上的nanoid是否已经存在于持久性存储中
class Work(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
published = models.BooleanField(False)
date = models.DateTimeField()
nanoid = models.CharField(max_length=15)
def save(self, *args, **kwargs):
nanoid = generate_id()
super(Work, self).save(*args, **kwargs)
def __str__ (self):
return self.title
# Helpers
def generate_id():
"""
Generate nanoid unique code.
"""
n_id = generate(size=10)
while not is_available_code(n_id):
n_id = generate(size=10)
return n_id
def is_available_id(id):
"""
Validate Id.
"""
return not id_is_nanoid(id)
def id_is_nanoid(id):
return Work.objects.filter(nanoid=id).exists()
如果将函数作为默认值传递,则它必须是不带参数的函数。您可以使用将
generate
转换为不接受参数且将size=10设置为默认值的函数
from functools import partial
class Work(models.Model):
...
nanoid = models.CharField(max_length=15, default=partial(generate, size=10))
非常优雅,谢谢:)!哦,这给了我AttributeError:“function”对象在迁移时没有属性“generate:(知道如何解决这个问题吗?