Django模型实例常量

时间:2016-12-05 17:50:21

标签: python django

我想拥有模型实例的常量。简化,这看起来像这样:

class MyModel(models.Model):
    codename = models.CharField(max_length=50, unique=True)

constant1 = MyModel.objects.get_or_create(codename="cool")

当然我不能那样做这么简单,因为这段代码会尝试在任何迁移完成之前将数据放入数据库,否则它将失败,因为"模型没有加载"在某些时候等等。但我真的想要这样的常量,因为我觉得它很方便导入。

对我来说明显的解决方法 - 就是创建函数,例如" def constant1():..."或" def get_constant1():..."这将做同样的事情,但在迁移阶段永远不会造成任何问题。

但我想访问我的" constant1"喜欢变量(某事物= constant1),而不是像一个函数(某事物= constant1())

请告诉我,有没有正确的方法来实现这样的常量,或者我应该投降?

1 个答案:

答案 0 :(得分:0)

I want to have constants of model instances. 

你不应该。您的模型只是抽象地定义您的表/数据库模式,您不希望模型中包含此实例,并且它对imo没有意义。

如果您想获得特定的模型实例,正如您所指出的,您可以创建一个函数来执行此操作:

e.g。 (使用相同的方法)

@classmethod #Edit form comment, no reason not to add it
def get_instance(cls, **kwargs):

   return cls.objects.get_or_create(**kwargs)

就个人而言,我甚至不会这样做,因为它可能会产生无意的副作用。如果你只是迭代地尝试获取一些模型实例(你不应该这样做......你可以只使用filter等)并且你刚刚创建了X个新实例,该怎么办?如果您正在尝试获取实例,则假设它存在,并且您很可能希望使用 实例执行某些操作,而不是随机创建实例。