Django模型中的静态对象类/外键作为键

0 投票
1 回答
704 浏览
提问于 2025-04-16 18:00

我刚开始接触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 类才能作为外键使用。

“外键”是数据库中的一个概念。

如果你想用一些不是数据库的东西作为外键,那它们就只是字符串或数字,而这个“引用”是一个简单的映射,由在代码中管理。

撰写回答