Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何在模型字段的默认属性中使用DB参数?_Python_Django - Fatal编程技术网

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查询)