4

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

4

2 回答 2

3

是的,choices:将 ID+名称对存储为元组的元组,并在另一个结构中存储任何其他参数。

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_instance.category]['slug']

或创建简单的包装类:

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)
于 2012-08-03T10:50:56.087 回答
0

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

于 2012-08-03T10:52:08.667 回答