我想拥有模型实例的常量。简化,这看起来像这样:
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())
请告诉我,有没有正确的方法来实现这样的常量,或者我应该投降?
答案 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个新实例,该怎么办?如果您正在尝试获取实例,则假设它存在,并且您很可能希望使用 实例执行某些操作,而不是随机创建实例。