Django-import-export exclude не может работать с `fields.Field(ForeignKeyWidget(....
Я хочу, чтобы поле name
было описанием в экспортном файле, не импортируйте его, если оно существует.
Но он всегда находит экземпляры с name
и получает ошибку return more than 2.
class Employee(models.Model):
name = models.CharField(max_length=180, null=True, blank=True)
id_number = models.CharField(max_length=180, null=True, blank=True, unique=True)
class EmployeeFootprint(models.Model):
rcsp = models.CharField(max_length=180, null=True, blank=True)
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, null=True, blank=True)
class EmployeeFootprintResource(resources.ModelResource):
employee = fields.Field(column_name='id_number', attribute='employee', widget=ForeignKeyWidget(models.Employee, 'id_number'))
name = fields.Field(column_name='name', attribute='employee', widget=ForeignKeyWidget(models.Employee, 'name'))
class Meta:
model = models.EmployeeFootprint
exclude = ['id', 'name']
import_id_fields = ['employee', 'rcsp']
ForeignKeyWidget
требует, чтобы он мог однозначно идентифицировать экземпляр в таблице FK с помощью поля, которое вы предоставите.
В вашем случае в Employee
есть 2 или более строк с одинаковым значением name
, следовательно, импорт не удается MultipleObjectsReturned
.
Я хочу, чтобы поле имени было описанием в экспортном файле, не импортируйте его, если оно существует.
Это невозможно, потому что ваш EmployeeFootprintResource
объявляет name
, который имеет FK-отношение к Employee
, поэтому должен существовать единственный экземпляр сотрудника, идентифицируемый name
, чтобы импорт работал.
Если вы хотите создать запись Employee
, если она не существует, обратитесь к этому ответу