Заказ 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
Ответы
Ответ 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')