微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DJANGO ORM - 使用案例中的时间列表更新/添加字段

如何解决DJANGO ORM - 使用案例中的时间列表更新/添加字段

模型有一个坐标字段(Point(0,0))。另外,我有字典列表,其中键是“id”,值是 polygon 对象。任务是检查坐标是否与多边形相交,如果是,我需要用一个字段进行注释,我想在那里放置一个来自 dict 的 id。我已经提出了一个解决方案,它仅在列表中只有一个对象时才有效,它不止一个,Django 在应用另一个对象期间重写一个值,而我需要将它添加到字段中。最重要的是我需要通过使用一个请求来做到这一点,因为数据库中可能有数千个结构和许多多边形。

我的代码

    def get_specific_constructions_with_polygons(cls,ids,polygons):
        cases = [
            When(
                coord__intersects=p,then=Value(_id)
            )
            for polygon in polygons for _id,p in polygon.items()
        ]
        constructions = cls.objects.filter(
            pk__in=ids
        ).annotate(
            polygon_area=Case(
                *cases,output_field=IntegerField()
            )
        ).order_by('-polygon_area')
        return constructions

当我像这样从每个对象打印多边形区域字段

        constructions = models.Construction.get_specific_constructions_with_polygons(
            ids=constructions_ids,polygons=polygons
        )
        x = [i.polygon_area for i in constructions]
        print(x)

输出将是 [None,18,18] 但我需要这样的输出数据

[None,[18,19],19]....,19]]

或者可以通过使用字典(JSON)来完成

创建多边形前的数据

[{'id': 19,'region_id': 94,'coordinates': {'points': [{'lat': 55.08764270504437,'lng': 82.7758026123047},{'lat': 55.06916824550091,'lng': 83.05320739746095},{'lat': 54.92501119405891,'lng': 83.023681640625},{'lat': 54.917118829960955,'lng': 82.72773742675781},{'lat': 55.02550319754567,'lng': 82.62680053710939},{'lat': 55.08764270504437,'lng': 82.7758026123047}]}},{'id': 18,'region_id': 95,'coordinates': {'points': [{'lat': 55.65303048074722,'lng': 37.45582580566407},{'lat': 55.86244285205762,'lng': 37.80670166015626},{'lat': 55.65303048074722,'lng': 37.45582580566407}]}}]

用多边形创建数据的代码

        for part in data:
            dirty_polygon = []
            coordinates = part.get(
                'coordinates').get('points')
            _id = part.get('id')
            for point in coordinates:
                lat = point.get('lat')
                lng = point.get('lng')
                dirty_polygon.append(Point(x=lng,y=lat))
            polygons.append({_id: polygon(dirty_polygon)})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。