Django - 模型 + 字典列表
我有一个数据结构,长得像这样:
[{'name': 'sfsdf sdfsdf', 'id': '621205528'},
{'name': 'test name', 'id': '32324234234'},
{'name': 'another name', 'id': '3434535342221'}]
现在我有一个叫做 Profile 的模型,其中字典里的 id 对应模型中的 uid 字段。
我想把列表中所有在数据库里存在的条目都删除掉。有没有什么优雅的方法可以做到这一点?现在我用了一堆 for 循环,还多次调用数据库,但这样可能不是最好的做法。
5 个回答
0
我会这样做:
data = [{'name': 'sfsdf sdfsdf', 'id': '621205528'},
{'name': 'test name', 'id': '32324234234'},
{'name': 'another name', 'id': '3434535342221'}]
Profile.objects.filter(id__in=[x['id'] for x in data]).delete()
这是一个更详细的版本:
ids = [x['id'] for x in data] # gives you ['621205528', '32324234234', '3434535342221']
selection = Profile.objects.filter(id__in=ids)
selection.delete()
1
ids = [x['id'] for x in my_list]
existing_ids = Profile.objects.filter(id__in=ids).values_list('id', flat=True)
result = filter(lambda elm: elm['id'] in existing_ids, my_list)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
1
你可以一次性从数据库里获取一个匹配的列表,然后进行比较:
db_ids = set(Profile.objects.values_list('uid', flat=True))
my_ids = set([d['id'] for d in original_list])
ids_to_keep = my_ids - db_ids
list_to_keep = [l for l in original_list if l['id'] in ids_to_keep]