Django模型中的静态对象类/外键作为键
我刚开始接触Django和Python,正在搭建一个网站,用户可以从可用服务的列表中选择,然后输入关于这些服务的信息。
我不想把服务列表放在数据库里,因为这更像是网站的配置信息,而不是用户的信息。所以我把它们设置成一个对象类(这是朋友推荐的做法)。
class Service(object):
def __init__(self, name, sections, link, enabled=True):
self.name = name
self.link = link
self.sections = sections
self.enabled = enabled
SERVICES = {
'SERVICE1': ArtistService(
'Service Name',
['Section Name 1','Section Name 2',],
'http://www.service.com',
),
我想知道能不能把这个类用作数据库中的外键?我希望通过模板连接从这个类中获取一些关于服务的信息。举个例子:
{% for s in user_activated_services %}
{{ s.service.name }}
{% endfor %}
但现在不行,因为我只是把键保存在用户激活服务模型中的一个CharField里:
class ActivatedServices(models.Model):
user_page = models.ForeignKey(Page)
service = models.CharField(max_length=20, choices=[(k, s.name) for k, s in userservices.services.SERVICES.iteritems()])
当我尝试用外键替换时,我收到一个错误,提示“ForeignKey的第一个参数必须是模型、模型名称或者字符串'self'”。
不过,我觉得我知道问题出在哪里,只是没法解决。希望这些信息足够。我肯定是漏掉了什么简单的东西。
提前谢谢你。
1 个回答
1
这个类可以用作数据库中的外键吗?
不可以。
只有 models.Model
类才能作为外键使用。
“外键”是数据库中的一个概念。
如果你想用一些不是数据库的东西作为外键,那它们就只是字符串或数字,而这个“引用”是一个简单的映射,由你在代码中管理。