如何将这些循环转换为精细优化的Django查询
你能帮我优化这个视图吗?完成这项工作需要30多分钟。 我认为问题出在Django查询中。cSomeone建议我将所有查询如何将这些循环转换为精细优化的Django查询,django,django-models,postgis,Django,Django Models,Postgis,你能帮我优化这个视图吗?完成这项工作需要30多分钟。 我认为问题出在Django查询中。cSomeone建议我将所有查询放在列表或字典中 我试过了,但我不知道如何推断Django查询 下面是节点和边模型 class Edge(models.Model): geometry = models.LineStringField(null=True) name = models.CharField(max_length=200, blank=False) target = mod
放在列表或字典中 我试过了,但我不知道如何推断Django查询 下面是节点和边模型
class Edge(models.Model):
geometry = models.LineStringField(null=True)
name = models.CharField(max_length=200, blank=False)
target = models.ForeignKey(Node, on_delete=models.CASCADE)
source = models.ForeignKey(Node, on_delete=models.CASCADE)
network = models.ForeignKey(RoadNetWork,
on_delete=models.CASCADE)
road_type = models.ForeignKey(RoadType,
on_delete=models.CASCADE)
class Node(models.Model):
network = models.ForeignKey(RoadNetWork,
on_delete=models.CASCADE)
node_id = models.BigIntegerField()
name = models.CharField('Node Name', max_length=200)
location = models.PointField()
target\u node\u instance
和source\u node\u instance
用于什么?只需删除这两行,然后按目标和源将过滤器移动到下面的行。也不清楚网络id
过滤器应该做什么。您只需按主键获取一个节点实例,然后从包含主键的同一实例获取属性,并再次使用相同的键筛选相同的模型?出于什么原因?您可以包括您的节点
和边缘
类定义吗?@IvanStarostin target_Node_实例和source_Node_实例允许我获取网络id和节点_id@Brad我只是添加了节点和边缘模型。请帮帮我!问题是try块中的代码
def upload_edge(request, pk):
template = "networks/edge.html"
roadnetwork = RoadNetWork.objects.get(id=pk)
road_type = RoadType.objects.get(pk=2)
_node_instance_ = Node.objects.select_related('network').filter(network_id=pk)
if request.method == 'POST':
form = EdgeForm(request.POST, request.FILES)
if form.is_valid():
datafile = request.FILES['my_file']
objects = json.load(datafile)
L=[]
for object in objects['features']:
objet_type = object['geometry']['type']
if objet_type == 'LineString':
properties = object['properties']
geometry = object['geometry']
point1 = geometry['coordinates'][0]
point2 = geometry['coordinates'][1]
location = GEOSGeometry(
LineString(geometry['coordinates']))
target = properties.get('target')
source = properties.get('source')
name = properties.get('name')
try:
target = _node_instance_.get(node_id=target)
source = _node_instance_.get(node_id=source)
node = Edge(
geometry=location,
road_type=road_type,
target=target,
source=source,
network=roadnetwork)
L.append(node)
except:
pass
Edge.objects.bulk_create(L)
return redirect('home')
else:
form = EdgeForm()
return render(request, template, {'form': form})