Менеджеры, модели наследования или что за нарезка Users в django? - PullRequest
0 голосов
/ 02 июня 2010

Я пишу проект в Django, где у меня 5 групп пользователей:

  • Group1
  • Group2
  • ...

Тогда у меня есть Модель, Элемент , которая имеет много отношений с пользователями, у Элемента есть один Владелец (Пользователь в Группе1), Клиент (Пользователь в Группе2) и много RelatedUser (Пользователи в Group3).

Мне интересно, как правильно написать эти отношения. Я хотел бы написать что-то вроде:

class Item(models.Model):
    owner = models.ForeignKey(Owner)
    customer = models.ForeignKey(Customer)
    users = models.ManyToManyField(RelatedUser)

Определив каким-либо образом классы Owner, Customer и RelatedUser.

Я не знаю, как этого добиться. Я не хочу использовать модели наследования, потому что я просто хочу таблицу User. Даже Менеджеры, кажется, не помогают мне. На самом деле я использую что-то вроде этого:

try:
    customer = models.ForeignKey(User,
                              related_name='cust',
                              limit_choices_to = {'groups__in': [Group.objects.get(name = 'customers')]})
except:
    customer = models.ForeignKey(User,
                              related_name='cust')

В основном потому, что при запуске пустой базы данных группа «клиенты» не существует и возникают ошибки.

Какой правильный способ позволить себе это?

Заранее спасибо

1 Ответ

0 голосов
/ 02 июня 2010

Вы можете определить отдельные модели для каждого типа пользователя - каждая с ForiegnKey to User. Достоинством является простота, но недостатком является то, что этот подход добавляет несколько таблиц и не особенно расширяем, если вам нужно добавить больше групп позже.

Другим вариантом является определение модели групп, которая хранит различные типы доступных групп и имеет отношение ManyToMany к пользователю (при условии, что один пользователь может входить в несколько групп).

Вы можете обойти проблему отсутствия групп при запуске из новой базы данных, создав приспособление для модели групп. Приспособление - это текстовый файл (по умолчанию это формат JSON), который определяет набор данных, которые могут быть легко загружены в БД, автоматически или вручную. Приспособления могут быть легко созданы из существующих данных с помощью команды управления dumpdata .

Если вы хотите, чтобы прибор автоматически загружался (при запуске syncdb), создайте каталог fixtures в своем приложении и назовите прибор initial_data. Вы также можете создавать другие приборы и загружать их с помощью команды loaddata или в своих тестах, указав список fixtures для определенного TestCase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...