在特定参数下创建新对象

时间:2019-07-10 02:12:25

标签: django django-models

我是django的新手,正在尝试了解django模型的功能。我偶然发现了模型管理器,并了解它们可用于执行自定义查询,并且了解它们如何实现该功能。

但是,如果我想创建一个新对象却要遵循一组特定的准则,该怎么办?例如,假设我有一个这样的模型:

#models.py
class TestModel(model.Model):
    num = models.IntegerField(default=5)

现在,如果我在不指定num值的情况下创建一个新对象,它将设置其默认值等于5。但是在模型中是否可以有一个创建函数来为其赋予另一个值。例如,如果我希望该值是介于1到100之间的随机数,那该怎么办?我知道我总是可以运行该函数,然后将num字段设置为等于其输出,然后创建新对象,但是我想要函数在模型中运行,并且仅通过调用TestModel()即可执行。这可能吗?

1 个答案:

答案 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)