2015-06-03 6 views
1

У меня есть иерархическая структура в том смысле, что может быть компания и пользователь, где компания может быть вложена в другую компанию, в то время как пользователи могут быть независимыми или принадлежать компании. Есть ли какая-либо документация о том, как использовать пользовательскую модель django в сочетании с пакетом django-mptt?Расширение модели пользователя django с использованием Django-mppt

ответ

1

Django documentation: Customizing authentication in Django рекомендует следующие параметры:

  • Написать модель с отношением один-к-одному с моделью пользователя (Extending the User model):

Есть два способа продлить по умолчанию, без замены вашей собственной модели. Если требуемые изменения являются чисто поведенческими и не требуют каких-либо изменений в том, что хранится в базе данных, вы можете создать прокси-модель на основе User. Это позволяет использовать любые функции, предлагаемые прокси-моделями, включая заказ по умолчанию, пользовательские менеджеры или настраиваемые модели.

Если вы хотите хранить информацию, связанную с пользователем, вы можете использовать взаимно-однозначное отношение к модели, содержащей поля для получения дополнительной информации. Эта модель «один-к-одному» часто называется моделью профиля, поскольку она может хранить информацию, не связанную с auth, о пользователе сайта.

Некоторых виды проектов могут иметь требование проверки подлинности, для которых Django встроенной в модели пользователя не всегда уместна. Например, на некоторых сайтах имеет смысл использовать адрес электронной почты в качестве идентификационного токена вместо имени пользователя.

Оба вышеуказанного могут наследовать от MPTTModel и решить вашу проблему. Я лично рекомендовал бы первый подход как более простой, и мне кажется, что этого будет достаточно для того, что вы описываете, но это снова зависит от ваших конкретных будущих потребностей.

1

Я думаю, что вы описываете на самом деле две разные проблемы. Модель вашей компании должна быть иерархической, но это не значит, что модель пользователя также должна быть. Вы бы, наверное:

class Company(<mpttmodel>): 
    pass 

class YourUser(User): 
    company = models.ForeignKey(null=True) 

В противном случае, если YourUser наследуется FRM модель mptt вы будете иметь вашу пользовательскую модель иерархического вместо модели компании.

 Смежные вопросы

  • Нет связанных вопросов^_^