使用 django-import-export 导入文件时如何删除记录?
How i can to delete record when import file using 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 插件导入时如何删除旧记录?
这是我的代码
class PersonalResource(resources.ModelResource):
class Meta:
model = Personal
import_id_fields = ('p_id',)
class PersonalAdmin(ImportExportModelAdmin,admin.ModelAdmin):
resource_class = PersonalResource
list_display = ['p_id','name','poistion','dept']
search_fields = ['p_id']
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()
的含义
- 对于较小的数据集,您可以考虑 运行 transaction。
我的项目使用 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 插件导入时如何删除旧记录?
这是我的代码
class PersonalResource(resources.ModelResource):
class Meta:
model = Personal
import_id_fields = ('p_id',)
class PersonalAdmin(ImportExportModelAdmin,admin.ModelAdmin):
resource_class = PersonalResource
list_display = ['p_id','name','poistion','dept']
search_fields = ['p_id']
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() 的含义
- 对于较小的数据集,您可以考虑 运行 transaction。