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, если она не существует, обратитесь к этому ответу

Вернуться на верх