首页 > 解决方案 > 在特定参数下创建新对象

问题描述

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

但是,如果我想在一组特定的指导下创建一个新对象怎么办。例如,假设我有一个这样的模型:

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

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

标签: djangodjango-models

解决方案


如您所知,有多种方法可以生成随机整数,例如使用 random、numpy 等包。但也有一个名为Universally Unique IDentifieruuid的包,它根据时间、计算机硬件(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)


推荐阅读