2013-09-30 6 views
0

Обзор системы:базы данных дизайн таблицы путаница в Django

В моей системе, клиент может зарегистрироваться для приложения, то клиент может создать роль и создать пользователей с ролью, определенной. Таким образом, у одного клиента может быть много пользователей.

Я создал модель клиента, которая связана с пользователем.

class Client(models.Model): 

    user = models.OneToOneField(User) 

    # True if the signed up user is client 
    is_client = models.BooleanField(default=True) 

    # Which company the client represents 
    company = models.CharField(max_length=200, null=True) 

    # Address of the company 
    address = models.CharField(max_length=200, null=True) 

Но я думаю, что это неправильный подход. Потому что, когда я хочу перечислить пользователей определенных клиентов, я не могу этого сделать. Кроме того, где я должен хранить роль пользователя? Должен ли я изменить auth_permission стол. Спасибо

ответ

0

Необходимо установить связьдля пользователя к клиенту вместо OneToOne. Для этого либо вы расширяете модель django User, либо создаете свой собственный класс профиля пользователя.

Для расширения и добавления атрибутов в User модели см Extending User model


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

  1. Создайте модель профиля пользователя в своем приложении с отношением OneToOne с User.

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

    класс UserProfile (models.Model): клиент = models.ForiegnKey ('Клиент') ...

  3. Создать экземпляр UserProfile для пользователя всякий раз, когда создается новый пользователь.

  4. Раньше у django был метод user.get_profile(), чтобы получить объект профиля пользователя для пользователя, но в 1.5.1 его устарел.

+0

Я хочу реализовать свой второй подход. Но вместо создания другой модели 'userProfile', я не могу просто считать, что« Клиент »является« UserProfile ». – pynovice

+0

@ user2032220, вы хотите, чтобы у многих пользователей было право клиента, тогда вы не можете сделать это с помощью 'Client' как' UserProfile' – Rohan

+0

Хорошо спасибо за это. Но вместо 'OnetoOne', если я делаю' user = models.ForeignKey (User) ', это можно сделать правильно. – pynovice

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