过滤Django查询集

过滤Django查询集,django,django-queryset,Django,Django Queryset,免责声明:我没有创建此模型。我知道这不是一个好的,它应该被重构。但我不能改变它,我必须与之合作。另外,如果我犯了语法错误,我也很抱歉,英语不是我的第一语言 我有一个(简化的)模型,其中一个事件有一个组,这个组有许多用户 class Event(): clients_group = models.ForeignKey("ClientsGroup") class ClientsGroup(): group_name = models.CharField() clients

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

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

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)
但我得到一个空列表。

解决方案 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)

从这里,您可以确定哪些查询有效,哪些无效。

较小的查询集有效吗?例如,
Client.objects.filter(user\u username=logged\u in\u user.username)
返回什么?
ClientsGroup.objects.filter(clients\uuuu user\uuuu username=logged\u in\u user.username
等等)怎么样?很抱歉,我在创建问题时犯了一个错误。在实际代码中是ManyToManyFieldOk。您是否尝试过将查询拆分,看看是否至少可以获得客户机?