Django模型复杂查询

2024-05-28 19:52:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下django型号:

class Mappings(models.Model):
    placeFrom = models.CharField(max_length=50)
    placeTo = models.CharField(max_length=50)
    totalTime = models.TimeField()

下面是表格的填充方式:

placeFrom       placeTo   totalTime     
new york        london        03:55
london          paris         22:33
london          new york      03: 23
amsterdam       london        82:39

其思想是为一个没有直接映射的映射查找所有数据库行连接。用于例如,在这种情况下,纽约-巴黎没有直接的联系。所以呢,返回的表行应为

new york        london        03:55
london          paris         22:33

你知道怎么做吗? 我首先使用Mappings.objects.filter(placeTo="london")来获取表示“某地”和“伦敦”之间映射的所有行。因此,我知道返回的行对我来说可能很好,如果返回的是“纽约”和“某地”之间的映射,但不知道如何检查。。你知道吗


Tags: djangonewmodelslengthmaxclassmappingscharfield
3条回答

您需要做一些事情,比如在哪里可以建立路由,并轻松地找出哪些位置(或节点)没有连接。完成后,您需要遵循@DanielRoseman的建议,并使用一个图形搜索算法来填补空白

import networkx as nx
G = nx.DiGraph()

G.add_node('new york')
G.add_node('london')
G.add_node('paris')
G.add_node('amsterdam')

G.add_edge('new york', 'london', weight=235)
G.add_edge('london', 'paris', weight=1353)
G.add_edge('london', 'new york', weight=203)
G.add_edge('amsterdam', 'london', weight=4959)

print 'All places not linked to new york:'
for location in nx.non_neighbors(G,'new york'):
    print location

n.b.为了更清楚,我没有展示从模型中导入数据的方法,但是您可以理解

您将得到以下输出

All places not linked to new york:
paris
amsterdam 

这是一个图形问题,不是吗?您基本上需要构建一个图,其中节点是您的位置,边是您的映射(其中边长度=映射.总时间),然后应用相关图搜索算法(如Dijkstra's algorithm)寻找相关节点之间的最短路径。你知道吗

不过,如果不先从数据库获取所有映射并构建图形,我认为没有任何方法可以做到这一点。你知道吗

谢谢你的建议,我选择从简单的解决方案开始,虽然不太理想,但它能帮我找到更好的解决方案好的。这个我现在得到的是:

querySetToEndLocation = Mappings.objects.filter(placeTo="london")
toEnd = []
toMiddle = []
for row in querySetToEndLocation:
  locationFrom = row.placeFrom
  queryNew = Mappings.objects.filter(placeFrom="new york")
  for rowquery in queryNew:
    if locationFrom == rowquery.placeTo:
       toEnd.append(row)
       toMiddle.append(rowquery)

相关问题 更多 >

    热门问题