Python Django:如何在模型字段的默认属性中使用DB参数?
我创建了一个(类)单例,将所有应用程序参数放入我的数据库中:Python Django:如何在模型字段的默认属性中使用DB参数?,python,django,Python,Django,我创建了一个(类)单例,将所有应用程序参数放入我的数据库中: class SingletonModel(models.Model): def save(self, *args, **kwargs): self.pk = 1 super(SingletonModel, self).save(*args, **kwargs) @classmethod def load(cls): return cls.objects.all
class SingletonModel(models.Model):
def save(self, *args, **kwargs):
self.pk = 1
super(SingletonModel, self).save(*args, **kwargs)
@classmethod
def load(cls):
return cls.objects.all().get()
class Meta:
abstract = True
class AppParameters(SingletonModel, models.Model):
DEFAULT_BALANCE_ALERT_THRESHOLD = models.PositiveIntegerField(default=5)
# other parameters...
它工作得很好,直到我尝试在模型字段的default
属性中使用其中一个参数:
class Convive(models.Model):
balance_alert_threshold = models.IntegerField(
default=AppParameters.load().DEFAULT_BALANCE_ALERT_THRESHOLD,
blank=True,
null=True)
这似乎也很有效,但当我使用脚本重新初始化本地数据时,第一个manage.py migrate
生成了一个DoesNotExist
,因为我的单例还不存在。
发生这种情况是因为文件导入了Convive
model
你将如何解决这个问题?
有没有办法“延迟”默认字段的计算
谢谢
编辑
发布此消息后,我认为如果我的代码在导入时处理db查询,则可能有问题…创建一个返回默认值的方法
def get_default_balance_alert_threshold():
return AppParameters.load().DEFAULT_BALANCE_ALERT_THRESHOLD
然后使用该方法作为默认方法
class Convive(models.Model):
balance_alert_threshold = models.IntegerField(
default=get_default_balance_alert_threshold,
blank=True,
null=True,
)
简单聪明,谢谢!这解决了这两个问题(DoesNotExist错误和在导入时运行的潜在DB查询)