Связывание ForeignKey на auth. Пользовательская модель - PullRequest
1 голос
/ 24 апреля 2011

Я пытаюсь связать модель Account со стандартной моделью django auth.User.

Мне кажется, что ForeignKey на User указывает на Account, поэтому я могу использовать что-то вроде account.users.

Как и так

class User(User):
    account = ForeignKey(Account, related_name='users')
    ...

Однако, как мы все знаем, рекомендуемый способ добавления информации в модель User - через UserProfile.

Как и так

class UserProfile(models.Model):
    account = ForeignKey(Account, related_name='profiles')
    user = ForeignKey(User)
    ...

, что означает, что если я хочу получить список всех Users в учетной записи Account, мне нужно сделать что-то вроде

users = [p.user for p in account.profiles]

Хотя это только одна строка, я предполагаю, что каждый p.user генерирует дополнительный удар по базе данных, который кажется крайне неэффективным по сравнению с тем, если бы модель User была доступна непосредственно через модель Account.

Есть ли более эффективный способ сделать это? Или я что-то упускаю здесь очевидное?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Вы можете избежать дополнительных просмотров БД по профилю, используя select_related.

profiles = account.select_related().profiles

также будет включать все пользовательские поиски в единственном запросе.

Вот документация: http://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

0 голосов
/ 24 апреля 2011

Если я правильно понял, вы хотите, чтобы все пользователи определенной учетной записи. Учитывая это, вы должны быть в состоянии сделать следующее или что-то подобное.

users = User.objects.filter(userprofile__account=account)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...