过滤Django查询集

时间:2015-02-06 19:27:40

标签: django django-queryset

免责声明:我没有创建此模型。我知道它不是一个好的,它应该被重构。但我无法改变它,我必须与之合作。另外,对不起,如果我犯了任何语法错误,英语不是我的第一语言。

我有这个(简化的)模型,其中一个事件有一个组,这个组有很多用户。

class Event():
    clients_group = models.ForeignKey("ClientsGroup")

class ClientsGroup():
    group_name = models.CharField()
    clients = models.ManyToManyField("Client")

class Client():
    user = models.OneToOneField(User)

当用户登录时,我需要获取该用户与之相关的事件列表。

我试过了:

list_of_events = Event.objects.filter(clients_group__clients__user__username=logged_in_user.username)

但我得到一个空列表。

1 个答案:

答案 0 :(得分:2)

解决方案

ClientsGroup模型中的客户端字段不正确。它应该是

clients = models.ManyToManyField("Client")

<强>不

clients = models.ManyToMany("Client")

当你解决这个问题时,我认为应该可行。仔细检查您的模型是否确实在其中包含对象并且它们相互链接。

进一步调试

如果在更改字段名称后仍然无效,请尝试将查询拆分为调试。例如,您可以查询两个单独的查询

target_client = Client.objects.get(user=logged_in_user)
list_of_events = Event.objects.filter(clients_group__clients=target_client)

从这里你可以找出哪些查询有效,哪些查询无效。