#python #django #django-models
#python #django #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 %}
Но это не работает, потому что я просто сохраняю ключ в символьном поле в модели user_activated_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()])
Когда я пытаюсь заменить внешним ключом, я получаю сообщение об ошибке «Первым параметром для внешнего ключа должна быть либо модель, либо название модели, либо строка ‘self'»
В любом случае, я думаю, что знаю проблему, я просто не могу ее исправить. Надеюсь, этой информации достаточно. Я уверен, что я упускаю что-то глупое.
Заранее спасибо.
Ответ №1:
Возможно ли использовать этот класс в качестве внешнего ключа в базе данных?
Нет.
В качестве внешних ключей могут использоваться только models.Model
классы.
«Внешний ключ» — это концепция базы данных.
Если вы хотите использовать в качестве внешних ключей объекты, не относящиеся к базе данных, это просто строки или числа, а «ссылка» — это простое сопоставление, которым вы управляете в своем коде.