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