【问题标题】:django postgresql opposite list searchdjango postgresql 对面列表搜索
【发布时间】:2017-12-02 00:19:38
【问题描述】:

下午好

我正在将 django 与 postgresql 一起用于应用程序。

我有一个模型,其中包含一个字段,该字段是一个字符字段并存储 none/one/many 对外部数据库的引用。

  • 如果 none 为空
  • 如果一个就是引用本身(“CCCC”)
  • 如果很多,则每个引用用分号分隔(“AAAA;BBBB;CCCC;DDDD;EEEE;”)。这可以在下面看到:

模型的python文件示例如下:

Models.py file:

class Data(models.Model):
    ...
    external_database_id = models.CharField(max_length=255)
    ...

使用字符域的原因是,在开始时,所有这些信息只是为了向用户显示,并没有应用其他选项。

现在我需要使用 django 实现/应用查找过滤器。我有一个包含一些引用的数组:

For example: [AAAA,BBBB,EEEE]

我需要知道数据库中的任何条目是否与此列表中的任何条目匹配

到目前为止,我已经尝试过“external_database_id__in”查找过滤器“https://docs.djangoproject.com/en/1.11/ref/models/querysets/#in”。它适用于“none”和“one”但不适用于“many”,因为没有匹配的整个字符串到列表...

  • none: "" in [AAAA,BBBB,EEEE] --> FALSE(如预期)
  • 一个:[AAAA,BBBB,EEEE] 中的“CCCC” --> FALSE(如预期的那样)
  • 一个:[AAAA,BBBB,EEEE] 中的“EEEE” --> TRUE(如预期)
  • 很多:“AAAA;BBBB;”在 [AAAA,BBBB,EEEE] --> FALSE(如预期的那样,但不受欢迎,因为 TRUE 是正确的答案)
  • 很多:“AAAA;CCCC;”在 [AAAA,BBBB,EEEE] --> FALSE(如预期的那样,但不受欢迎,因为 TRUE 是正确的答案)
  • 很多:“CCCC;DDDD;”在 [AAAA,BBBB,EEEE] --> FALSE(如预期)

我曾想过做相反的事情,但在 django 或 postgresql 中找不到方法:

  • none: any[AAAA,BBBB,EEEE] in "" --> FALSE
  • one: "CCCC" 中的任何[AAAA,BBBB,EEEE] --> FALSE
  • 一个:“EEEE”中的任何[AAAA,BBBB,EEEE] --> TRUE
  • 许多:“AAAA;BBBB;”中的任何[AAAA,BBBB,EEEE] --> 是的
  • 许多:“AAAA;CCCC;”中的任何[AAAA,BBBB,EEEE] --> 是的
  • 许多:“CCCC;DDDD;”中的任何[AAAA,BBBB,EEEE] --> 错误

有什么想法吗? 非常感谢!

【问题讨论】:

    标签: python django postgresql django-models lookup


    【解决方案1】:

    你可以用普通的 Python 做到这一点

    # Using Python3.4
    sample = "AAAA;BBBB;"
    full = ["AAAA","BBBB","EEEE"]
    
    bool([x for x in sample.split(";") if x in full])
    
    >> True
    

    只要整个数组不包含空字符串,这将起作用。

    full 数组中的元素未在您的示例中引用,但我必须这样做才能使其正常工作。不确定这会如何影响您正在做的事情。

    【讨论】:

    • 问题是这需要在postgresql级别完成......因为所有数据都存储在数据库中......
    猜你喜欢
    • 2018-03-05
    • 2016-02-10
    • 1970-01-01
    • 2016-08-05
    • 2020-01-11
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多