Django Import-Export ошибка импорта для поля один-к-одному - KeyError: 'id'

Используется: Python 3.10.4
. Django 4.06
Django-import-export 2.8.0

Я пытаюсь импортировать данные для использования в качестве демонстрационных данных в моем приложении django. Я продолжаю получать ошибку KeyError.

### models.py
class Reservation(models.Model):
    reservation = models.OneToOneField(Vehicle, on_delete=models.CASCADE, primary_key=True,)
    delivered = models.BooleanField('Delivered',default=False)
    date_reserved = models.DateTimeField('date reserved', default=datetime.datetime.now)
    ...

### admin.py
class ReservationResource(resources.ModelResource):
    class Meta:
        model = Reservation
        exclude = ('id',)
        import_id_fields = ('reservation',)
        fields = (
            'reservation',
            'delivered',
            'date_reserved',
            ...
        )
class ReservationImportExport(ImportExportModelAdmin):
    resource_class: ReservationResource
@admin.register(Reservation)
class ReservationAdmin(SimpleHistoryAdmin, ReservationImportExport):
    fields = ["delivered","date_reserved",...]

### demo-reservations.yaml  (Note: Problem happens using different data file formats)
 - reservation: 50001
   delivered: False
   date_reserved: 7/15/2022T00:00:00+00:00
   ...

Вот ошибка (слегка завуалированная)

Traceback (most recent call last):
File "c:\Users\...\lib\site-packages\import_export\resources.py", line 661, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "c:\Users\...\lib\site-packages\import_export\resources.py", line 353, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "c:\Users\...\lib\site-packages\import_export\resources.py", line 340, in get_instance
import_id_fields = [
File "c:\Users\...\lib\site-packages\import_export\resources.py", line 341, in <listcomp>
self.fields[f] for f in self.get_import_id_fields()
KeyError: 'id'

Уже пробовали:

  1. Удалите SimpleHistoryAdmin из регистрации администратора
  2. .
  3. Поставьте точки останова в отладчике - ясно, что он игнорирует значение "import_id_fields". Если я вручную изменю значение на 'reservation', когда он вызывает get_import_id_fields(self), я получу дальнейшие результаты (второй вопрос я задам отдельно - предполагаю, что stackoverflow хочет 1 вопрос на вопрос. кто-нибудь, не стесняйтесь, дайте мне знать, если объединение их лучше работает). В отладчике я вижу, что 'id' является значением self._meta.import_id_fields, когда он доходит до этого вызова.
  4. .
  5. Изменение модели с OneToOne на ForeignKey

Во всех других ответах, которые мне удалось найти, говорится, что добавление исключающих полей id и import_id_ должно было решить эту проблему. Единственное, что я не пробовал (и действительно не хочу этого делать), это изменить имя столбца id/внешнего ключа.

В случае, если это будет найдено, просто хотел закрыть цикл. У меня была ошибка в коде.

class ReservationImportExport(ImportExportModelAdmin):
    resource_class: ReservationResource

должно было быть:

class ReservationImportExport(ImportExportModelAdmin):
    resource_class = ReservationResource

То, что = вместо : сделало всю разницу.

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