Как обновить поля при импорте Django?
Мне нужно обновлять поля при импорте для массового редактирования ManyToMany. При импорте сейчас я могу добавлять только продукты, потому что когда я пытаюсь добавить уже существующие поля, я получаю сообщение об уже существующих ID. Как я могу обновить продукты с помощью импорта?
admin.py
class ProductResource(resources.ModelResource):
class Meta:
model = Part
class PartAdmin(ImportExportActionModelAdmin):
resource_class = ProductResource
filter_horizontal = ('analog',)
admin.site.register(Part, PartAdmin)
models.py
class Part(models.Model):
brand = models.CharField('Производитель', max_length=100)
number = models.CharField('Артикул', max_length=100, unique=True)
name = models.CharField('Название', max_length=100)
description = models.TextField('Комментарий', blank=True, max_length=5000)
analog = models.ManyToManyField('self', blank=True, related_name='AnalogParts')
images = models.FileField('Главное изображение', upload_to = 'parts/', blank=True)
images0 = models.FileField('Дополнительное фото', upload_to = 'parts/', blank=True)
images1 = models.FileField('Дополнительное фото', upload_to = 'parts/', blank=True)
images2 = models.FileField('Дополнительное фото', upload_to = 'parts/', blank=True)
def __str__(self):
return str(self.brand + " " + self.number + " " + self.name)
return self.name
from django.contrib import admin
from .models import *
from import_export.admin import ImportExportActionModelAdmin
from import_export import resources
from import_export import fields
from import_export.widgets import ForeignKeyWidget
class ProductResource(resources.ModelResource):
#category = fields.Field(column_name='Артикул', attribute='number')
class Meta:
model = Part
import_id_field = 'number'
import_id_fields = ('number',)
def skip_row(self, instance, original):
original_id_value = getattr(original, self._meta.import_id_field)
instance_id_value = getattr(instance, self._meta.import_id_field)
if original_id_value != instance_id_value:
return True
if not self._meta.skip_unchanged:
return False
for field in self.get_fields():
try:
if list(field.get_value(instance).all()) != list(field.get_value(original).all()):
return False
except AttributeError:
if field.get_value(instance) != field.get_value(original):
return False
return True
admin.site.register(Kits)
class PartAdmin(ImportExportActionModelAdmin):
resource_class = ProductResource
filter_horizontal = ('analog',)
admin.site.register(Part, PartAdmin)
#class PartAdmin(admin.ModelAdmin):
# filter_horizontal = ('analog',)
#admin.site.register(Part, PartAdmin)