Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将这些循环转换为精细优化的Django查询_Django_Django Models_Postgis - Fatal编程技术网

如何将这些循环转换为精细优化的Django查询

如何将这些循环转换为精细优化的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

你能帮我优化这个视图吗?完成这项工作需要30多分钟。 我认为问题出在Django查询中。cSomeone建议我将所有查询
放在列表或字典中 我试过了,但我不知道如何推断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})