Django QuerySet订单

Django QuerySet订单,django,django-models,Django,Django Models,我对django和python都是新手,但我开始掌握一些东西。我想 我有这个问题,似乎找不到答案。(尽管我认为这很简单,限制因素是我的谷歌技能和python/django知识的缺乏) 情景: 用户可以选择在他或她选择的任意数量的商店接受临时职位空缺 我想提供一份仅按日期字段排序的即将到来的职位空缺(StoreEvents)列表 Example: Store A - 2009-04-20 Store B - 2009-04-22 Store A - 2009-04-23

我对django和python都是新手,但我开始掌握一些东西。我想

我有这个问题,似乎找不到答案。(尽管我认为这很简单,限制因素是我的谷歌技能和python/django知识的缺乏)

情景:

用户可以选择在他或她选择的任意数量的商店接受临时职位空缺

我想提供一份仅按日期字段排序的即将到来的职位空缺(StoreEvents)列表

Example: 
    Store A - 2009-04-20 
    Store B - 2009-04-22
    Store A - 2009-04-23
Atm我一直坚持先按存储区排序,然后按日期排序,因为我显然是通过存储模型访问StoreEvents的

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')
编辑:

下面的SQL实现了这一点,但我仍然不知道如何在django中实现这一点:

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

所有用户按日期订购:

queryset = StoreEvent.objects.all().order_by('-date')
要按用户筛选,请执行以下操作:

queryset = StoreEvent.objects.filter(stores__user=request.user).order_by('-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')

谢谢你们的帮助,伙计们,终于明白了:

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

它会导致3次SQL选择,但效果很好…

谢谢Harold,但这会给我任何按日期排序的StoreEvent。我只需要获取由UserStore模型控制的用户感兴趣的内容。谢谢Andrea,但这似乎不起作用,尽管我猜它很接近。您的两个示例都会导致一个空查询集,即使用户选择的商店中有列出的事件,您也应该能够更简单地执行此操作:
qs=StoreEvent.objects.filter(商店可用\u员工\u用户=user)。按('date')排序。
qs = StoreEvent.objects.filter(
    store__in=Store.objects.filter(
        available_staff__in=UserStore.objects.filter(user=user)
    )
).order_by('date')