【问题标题】:Filter data from models based on some condition根据某些条件从模型中过滤数据
【发布时间】:2013-10-18 09:09:42
【问题描述】:

我有两个模型 ClientsclientData 与外键相关。我想选择所有不在clientData模型中的客户端。模型的结构如下:

class Client(Model):
    name = CharField(max_length=NAME_FIELD_LENGTH)
    nickname = CharField(max_length=NAME_FIELD_LENGTH, null=True, blank=True, db_index=True)


class clientData(Model):
    art = ForeignKey(Art)
    client =  ForeignKey(Client)
    pj = ForeignKey(Pj, null=True, blank=True)

如果我运行这个查询

val = Client.objects.filter(clientswiki__client = 1)

它返回给我 id 为 1 的客户端的值,它应该是,但我想要的是如果 clientData 只有一个条目,即客户端 id 1,那么它将返回来自客户端模型的所有其他条目,期望 id 1 而我不不知道如何获得。

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    要选择 clientData 中不存在的客户端,我们可以获取 clientData 记录中的客户端列表,然后运行排除以将它们过滤掉。

    included_clients = clientData.objects.values_list('client', flat=True)
    
    excluded_clients = Client.objects.exclude(id__in=included_clients)
    

    【讨论】:

    • 谢谢,它有效。还有一个愚蠢的问题,这个“flat = True”和“id__in”而不是 id 的目的是什么?
    • 如果没有 flat=True,它将返回一个元组列表而不是一个平面属性列表。您可以在文档中查看一些示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2018-10-08
    相关资源
    最近更新 更多