下面是一个基本的大纲,介绍了如何实现它:
from django.db import transaction
def update_route_order(route_updates):
# Start a database transaction
with transaction.atomic():
# Step 1: Retrieve existing Route objects
existing_routes = Route.objects.all().order_by('order')
# Step 2: Update the order
for route_id, new_order in route_updates:
route = existing_routes.get(id=route_id)
route.order = new_order
route.save()
# Step 3: Handle additions and deletions
existing_route_ids = set(route.id for route in existing_routes)
updated_route_ids = set(route_id for route_id, _ in route_updates)
deleted_route_ids = existing_route_ids - updated_route_ids
added_route_ids = updated_route_ids - existing_route_ids
# Delete routes that are no longer present
Route.objects.filter(id__in=deleted_route_ids).delete()
# Create new routes for added items, preserving memo data
for route_id in added_route_ids:
original_route = Route.objects.get(id=route_id)
new_route = Route.objects.create(order=original_route.order, memo=original_route.memo)
# Optionally update other fields if needed
# Commit the transaction
transaction.commit()
Retrieve the existing Route objects:从数据库中提取所有现有的Route对象.
Update the order:根据用户的输入更新Route对象的顺序.
Handle additions and deletions:单独处理任何添加或删除,而不影响现有对象的备注数据.