我是django的新手,正在尝试了解django模型的功能。我偶然发现了模型管理器,并了解它们可用于执行自定义查询,并且了解它们如何实现该功能。
但是,如果我想创建一个新对象却要遵循一组特定的准则,该怎么办?例如,假设我有一个这样的模型:
#models.py
class TestModel(model.Model):
num = models.IntegerField(default=5)
现在,如果我在不指定num值的情况下创建一个新对象,它将设置其默认值等于5。但是在模型中是否可以有一个创建函数来为其赋予另一个值。例如,如果我希望该值是介于1到100之间的随机数,那该怎么办?我知道我总是可以运行该函数,然后将num字段设置为等于其输出,然后创建新对象,但是我想要函数在模型中运行,并且仅通过调用TestModel()即可执行。这可能吗?
答案 0 :(得分:1)
如您所知,有多种产生随机整数的方法,例如使用random,numpy等软件包。但是,还有一个名为uuid
的包,代表 Universally Unique IDentifier (通用唯一IDentifier),它会根据时间,计算机硬件(MAC等)的产生随机的128个字节的ID。
当您使用所有这些方法在常规python程序中生成随机数时,它们会很好地工作。但是,当您在Django模型中使用它们时,无论您运行多少次,它们每个都将提供相同的输出。
我发现了这种解决方法,
import uuid, random
class MyModel(models.Model):
def get_random_integer():
id = uuid.uuid4()
# id.int is a big number, use some logic to get number in range of 1 to 100
random.seed(id.int)
return random.randrange(1, 100)
num = models.IntegerField(default=get_random_integer)