我有一个场景,想知道最好的处理方法。
我有一个有n个地址的用户。
addressList (id)为例(我得到在前端)-
addresses=[1,2,3,4]
一旦我将所有地址获取到前端,用户可以删除一个或n个地址。
注意-删除只是从列表中删除地址对象(在前端),而不是从数据库中永久删除它。
所以这里addressList现在可以是-
addresses=[1,4]
同时,用户添加n个新地址
新的addressList可以是-
addresses=[1,4, {newAddressDetail}, {newAddressDetail}]
现在更新的数据(地址)被发送到后端用于更新过程。
想知道如何在后端处理这种情况最好吗?
事情是-
- 删除所有以前保存的当前未收到的地址。
- 不更改当前收到的先前保存的地址。 创建数据库中没有的新地址。
当用户从前端删除地址时,不建议从数据库中删除地址。地址在前端是不可编辑的,我在这里展示的数据仅用于解释目的,在技术上是不正确的。
如果需要,可以提供更多的细节。
我认为你最好的选择是在python中使用sets
。
new = set(addresses_from_frontend)
old = set(user.addresses.all())
Address.objects.bulk_create([Address(**item) for item in old - new])
Address.objects.filter(id__in=[a.id for a in new - old]).delete()
它不会完全像这样,你可能需要在删除地址之前使用地址id来获取地址等等。但主要的一点是,集合是一种有效的方法,bulk_create()和delete()使用过滤器也可以帮助你得到你的db查询。