Класс статических объектов / ключи как ForeignKey в модели Django - PullRequest
0 голосов
/ 20 мая 2011

Я на новой территории с Джанго / Питоном.Я создаю сайт, где пользователь выбирает из списка доступных сервисов, а затем вводит информацию об услугах.

Я не хотел сохранять список сервисов в базе данных, потому что это действительно больше сайтаинформация о конфигурации, а не информация о пользователе.Поэтому я устанавливаю их как класс объектов (рекомендуется другом)

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 в модели user_activation_services:

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 голос
/ 20 мая 2011

Можно ли использовать этот класс в качестве внешнего ключа в базе данных?

номер

В качестве внешних ключей могут использоваться только models.Model классы.

«Внешний ключ» - это концепция базы данных.

Если вы хотите, чтобы вещи, не относящиеся к базе данных, были внешними ключами, это просто строки или числа, а «ссылка» - это простое отображение, которым вы управляете в своем коде.

...