【问题标题】:Storing Application Logic in Django models在 Django 模型中存储应用程序逻辑
【发布时间】:2020-05-17 23:13:04
【问题描述】:

我正在使用 Django 制作一个 Web 应用程序,并且我想存储应用程序逻辑。解决此问题的最佳方法是什么?例如,我目前在我的 models.py 中存储了类似的东西,但至少可以说它似乎不是最理想的。

class Alphabet(models.Model):
    first = models.CharField(max_length=1, default = 'a')
    second = models.CharField(max_length=1, default = 'b')
    third = models.CharField(max_length=1, default = 'c')

class Digits(models.Model):
    first = models.CharField(max_length=1, default = '1')
    second = models.CharField(max_length=1, default = '2')
    third = models.CharField(max_length=1, default = '3')

Characters = [Alphabet, Digits]

我什至应该将这种数据存储在我的 models.py 文件夹中吗?

【问题讨论】:

    标签: python django postgresql django-models


    【解决方案1】:

    您可以为此使用property 装饰器:python property。正如您在model methods 文档中看到的那样,您可以将函数定义为模型的属性。只需返回您要使用的静态数据。我建议您在模型文件中定义它们,因为将它们写入数据库效率低。

    【讨论】:

    • 澄清一下,您是否建议我像这样构造该字段:first = property('a')
    • 不,在关于模型方法的第二个链接中,有一个名为 full_name 的属性,它是一个函数返回带有名字和姓氏值的全名。只需定义属性函数即可返回静态值。
    【解决方案2】:

    如果它没有改变,为什么不把它放到你的应用程序中呢? 如果您在数据库中需要它,那么为静态数据创建一个特殊表似乎是一个合理的决定。 或者您可以有一个特殊的表条目,其中包含具有特殊名称的所有默认值(默认值),例如“default”而不是普通名称。

    【讨论】:

    • @Nailuj 数据肯定会在应用程序逻辑中,没有理由将其放入数据库 - 它永远不会改变,改变它没有任何意义,它会破坏整个应用程序。但是如果你必须在数据库中拥有它:只需使用类别名称创建一个名为“类别”的表,然后是类别属性(例如,每个棋子都会有它的移动类型,如果它可以向后移动,它可以多快移动)。
    猜你喜欢
    • 2017-06-19
    • 2014-04-13
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多