поэтому я пишу миграцию, которая назначит значения широты и долготы для PointField в каждой записи базы данных.
У меня есть одно решение, которое работает, но оно слишком медленное для 10 000 000 записей базы данных.Поэтому я могу обновить каждую запись в цикле for, просто назначив точку lat и long точке, а затем сохранив запись.Но я хотел использовать метод .update () Django, чтобы сделать это намного быстрее.
class Listing(AirbnbModel):
latitude = models.DecimalField()
longitude = models.DecimalField()
point = PointField(srid=4326, geography=True, null=True) # new field
Это работает, но занимает слишком много времени, и это почти невозможно сделать для 10 000 000 записей
for listing in Listing.objects.all():
listing.point = Point(float(listing.latitude), float(listing.longitude))
listing.save()
Вот то, что я пытался сделать, но я получил ошибку.
Listing.objects.all().update(point=ExpressionWrapper(F('latitude'), F('longitude') , output_field=PointField()))
Я тоже пробовал это
Listing.objects.all().update(point=ExpressionWrapper(Point(Value('latitude'), Value('longitude')), output_field=PointField()))
Но это не работает вообще.