Как я могу удалить запись при импорте файла с помощью 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()
  • .
  • Вы можете рассмотреть возможность выполнения этого в транзакции для небольших наборов данных.
Вернуться на верх