Самый эффективный способ создать снимок набора запросов Django? - PullRequest
3 голосов
/ 04 апреля 2019

Я новичок в Django, и мне нужно очистить все существующие объекты, отвечающие определенному набору критериев, которые были ранее созданы импортером, до того, как импортер повторно запустится.

Я пытаюсь найти наиболее эффективный способ сделать это.В настоящее время я получаю существующие объекты перед импортом новых объектов и обновляю их с помощью логического to_be_deleted=True:

Thing.objects.filter(source=importer).update(to_be_deleted=True)
import_new_things(source=importer)
Thing.objects.filter(to_be_deleted=True).delete()

Но действительно ли мне нужно запускать обновление для всего этого набора запросов?Есть ли способ просто сохранить снимок набора запросов в переменную, а затем удалить его после завершения импорта?

1 Ответ

2 голосов
/ 04 апреля 2019

Чтобы сохранить «снимок» набора запросов, вы можете просто получить список идентификаторов.

# Get all the objects IDs
current_object_ids = list(Thing.objects.filter(source=importer).values_list('id', flat=True))

Тогда вы могли бы вызывать свою функцию, а если она удалась, вы могли бы удалить другие ваши объекты.

try:
    import_new_things(source=importer)
except: 
    # do something
else:
    # Run your delete
    Thing.objects.filter(id__in=current_object_ids).delete()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...