django множественный поисковый фильтр related_name () - PullRequest
0 голосов
/ 05 октября 2011

У меня есть профиль.

class UserProfile(models.Model):
    user = models.ForeignKey(User, related_name="%(class)s", unique=True)
    providers = models.ManyToManyField(ServiceProvider, related_name="%(class)s")

class ServiceProvider(models.Model):
    name = models.CharField(max_length=200, null=False, default="ims")  

Как мне добраться до объекта пользователя, просто имея объект профиля. Могу ли я сделать: (при условии, что у меня есть объект поставщика услуг)

provider.userprofile.user.get() // or something like that.

Я бы хотел сделать это одним SQL-запросом. Так что, если бы у меня был только pk провайдера, было бы здорово попасть в профиль пользователя и / или пользователя, который держит этого провайдера.

1 Ответ

0 голосов
/ 05 октября 2011

Так как ваш пользователь - просто внешний ключ, все, что вам нужно, это provider.userprofile.user

Если вы не хотите, чтобы это вызывало второй SQL-запрос, вы можете просто использовать опцию select_related при выбореваш профиль, например:

UserProfile.objects.get(pk=<the_id>,select_related=True)

Как написано, ваши модели не предоставляют тривиальный способ получения от поставщика к Пользователю, поскольку существует ManyToMany от ServiceProvider до UserProfile,Вам нужно будет получить набор UserProfile s, связанных с провайдером, получить тот, который вам нужен, и затем перейти к получению пользователя, как описано выше.

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