QuerySet, чтобы получить все атрибуты для контактов пользователя? - PullRequest
3 голосов
/ 28 февраля 2012

У меня есть следующие соответствующие модели:

class PositionTimestamp(models.Model):
    timestamp = models.DateTimeField(auto_now_add=True)
    position = models.ForeignKey('Position')
    profile = models.ForeignKey('UserProfile')

class Position(models.Model):
    position = models.CharField(max_length=100)
    ordering = models.IntegerField(max_length=3)
    select_display = models.CharField(max_length=100)

class UserProfile(models.Model):   
    def mutual_contacts(self):
        # returns all of the current User's contacts. A QuerySet of UserProfile objects.

Я бы хотел получить все position s для данного пользователя mutual_contacts. Вот что я сейчас делаю (неэффективно):

>>> p = UserProfile.objects.get(id=1)
>>> position_set=[]
>>> for profile in p.mutual_contacts():
        position_set.append(p.positiontimestamp_set.all())
>>> position_set
    [[<PositionTimestamp: PositionTimestamp object>, <PositionTimestamp: 
    PositionTimestamp object>, <PositionTimestamp: PositionTimestamp object>]]
>>> position_set = set([item.position for item in position_set[0]])

>>> position_set
    set([<Position: Director>, <Position: Writer>, <Position: Editor>])

Можно ли использовать QuerySet, чтобы получить то же самое?

1 Ответ

0 голосов
/ 28 февраля 2012

Чтобы получить все позиции для заданных пользовательских наборов, попробуйте этот код:

p = UserProfile.objects.get(id=1)
contacts = p.mutual_contacts()
positions = Position.objects.filter(positiontimestamp__profile__in=contacts)
...