Как я могу удалить запись при импорте файла с помощью django-import-export?
В моем проекте используется фреймворк Django и установлен плагин django-import-export. Я могу импортировать и экспортировать все нормально. Но когда я импортировал файл в базу данных. Все новые записи из файла были успешно импортированы, но старые записи, которых нет в новых записях, не удаляются.
старые данные в базе данных
ID , Name , wage
1 , Mr.A , 100
2 , Mr.B , 110
3 , Mr.C , 150
новая загрузка файла
ID , Name , wage
1 , Mr.A , 100
2 , Mr.B , 150
4 , Mr.D , 130
результат при импорте
ID , Name , wage
1 , Mr.A , 100
2 , Mr.B , 150
3 , Mr.C , 150 # < this not delete
4 , Mr.D , 130
Я хочу, чтобы в базе данных это было так.
----------
ID , Name , wage
1 , Mr.A , 100
2 , Mr.B , 150
4 , Mr.D , 130
Как удалить старую запись при импорте с помощью плагинов django-import-export?
django-import-export по умолчанию не будет делать этого за вас, но вы можете легко добавить несколько хуков для достижения этого.
Вы можете отслеживать id каждого импортированного или обновленного ряда, а затем удалять все остальные в конце импорта.
например:
class PersonalResource(resources.ModelResource):
instances_to_keep = set()
def after_save_instance(self, instance, using_transactions, dry_run):
self.instances_to_keep.add(instance.id)
def after_import(self, dataset, result, using_transactions, dry_run, **kwargs):
Personal.objects.exclude(id__in=self.instances_to_keep).delete()
class Meta:
model = Personal
import_id_fields = ('p_id',)
Некоторые моменты, на которые следует обратить внимание:
- Прочитайте о последствиях использования delete() .
- Вы можете рассмотреть возможность выполнения этого в транзакции для небольших наборов данных.