Подтвердить что ты не робот

Заказ Django QuerySet

Я новичок в django и python, но я начинаю понимать вещи. Я думаю.

У меня есть эта проблема, и я не могу найти ответ на нее. (Хотя я предполагаю, что это действительно просто, и ограничивающие факторы - это мои навыки Google и отсутствие знаний python/django)

Сценарий:

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

Я хотел бы представить список предстоящих вакансий (StoreEvents), отсортированных только по дате.

Example: 
    Store A - 2009-04-20 
    Store B - 2009-04-22
    Store A - 2009-04-23

Atm Я застрял в представлении данных, сначала отсортированных по хранилищу, а затем по дате, так как я явно обращаюсь к StoreEvents через модель Store.

Example:
    Store A - 2009-04-20
    Store A - 2009-04-23
    Store B - 2009-04-22

Итак, мой вопрос: возможно ли создать QuerySet, который выглядит как первый пример и как это сделать?

Примеры связанных моделей включали:

class Store(models.Model):

class StoreEvent(models.Model):
    info = models.TextField()
    date = models.DateField()
    store = models.ForeignKey(Store, related_name='events')

class UserStore(models.Model):
    user = models.ForeignKey(User, related_name='stores')
    store = models.ForeignKey(Store, related_name='available_staff')

Edit:

Следующий SQL делает трюк, но я все еще не могу понять, как это сделать в django:

SELECT *
FROM store_storeevent
WHERE store_id
IN (
    SELECT store_id
    FROM profile_userstore
    WHERE user_id =1
)
ORDER BY date
4b9b3361

Ответ 1

Спасибо за помощь, ребята, наконец, поняли:

qs = StoreEvent.objects.filter(
    store__in=Store.objects.filter(
        available_staff__in=UserStore.objects.filter(user=user)
    )
).order_by('date')

это приводит к 3 SQL SELECT, но делает трюк...

Ответ 2

Порядок по дате для всех пользователей:

queryset = StoreEvent.objects.all().order_by('-date')

Фильтровать по пользователю:

queryset = StoreEvent.objects.filter(stores__user=request.user).order_by('-date')

Ответ 3

queryset = StoreEvent.objects.filter(store__in=UserStore.objects.filter(user__id=1).store).order_by('store__name', '-date')

или более любезно

user = User.objects.get(username="foo")
user_stores = user.stores.all()

store_events = StoreEvent.objects.filter(store__in=user_stores).order_by('store__name', '-date')