在Django中硬编码数据的最佳方法

时间:2012-08-03 10:42:59

标签: django django-models

我有一个模型,新闻,有一个ForeignKey到另一个模型,类别。 使用id,name,slug和一些其他参数定义类别。 我的类别将来永远不会改变,所以我想知道为什么要将它们存储在数据库中。 有没有办法在代码中对它们进行硬编码,比如使用选择或任何其他技术?

2 个答案:

答案 0 :(得分:2)

是的,选择,将ID-name对存储为元组的元组,并在其他结构中存储任何其他参数。

CATEGORIES = (
    (1, "Some category"),
    (2, "Another category"),
)

CATEGORIES_PARAMS = {
    1: {'slug': 'param_value'},
    2: {'slug': 'another_value'},
}


class News(models.Model):
    category = models.IntegerField("category", choices=CATEGORIES)
    ...

然后您可以按照以下方式使用其他参数:

CATEGORIES_PARAMS[news_istance.category]['slug']

o创建简单的包装类:

class Category(object):
    def __init__(self, id):
        self.id = id

    def __getattr__(self, attr):
        return CATEGORIES_PARAMS[self.id][attr]


cat = Category(news_instance.category)
print cat.slug

答案 1 :(得分:0)

如果您打算使用ForeignKey在News和Category模型之间创建关系,则必须有一个模型Category。现在你说你的类别永远不会改变,但如果以后需要更改它们,你需要重新设计你的代码。要使用django的全套ORM功能,最好将其存储在数据库中并坚持设计。