Добавьте дополнительное значение из ImportForm в экземпляр модели перед импортом или сохранением

У меня есть следующая модель, которую я хочу импортировать:

class Token(models.Model):
    key = models.CharField(db_index=True,unique=True,primary_key=True,    )
    pool = models.ForeignKey(Pool, on_delete=models.CASCADE)
    state = models.PositiveSmallIntegerField(default=State.VALID, choices=State.choices) 

тогда модель ресурса:

class TokenResource(resources.ModelResource):
class Meta:
    model = Token
    import_id_fields = ("key",)

и ImportForm для запроса пула:

class AccessTokenImportForm(ImportForm):
pool = forms.ModelChoiceField(queryset=Pool.objects.all(), required=True)

Это значение должно быть установлено для всех импортированных объектов токенов. Проблема в том, что я пока не нашел способа реализовать это.

Как получить значение из формы в экземпляр?

В методах before_save_instance и подобных я больше не могу получить доступ к этим значениям. Я должен передавать их намного раньше, я полагаю. Кто-нибудь когда-нибудь делал что-то подобное?

Спасибо и пожелания Matt

Кажется, что вы можете передать дополнительное значение в Admin:

class TokenAdmin(ImportMixin, admin.ModelAdmin):

def get_import_data_kwargs(self, request, *args, **kwargs):
    form = kwargs.get('form')
    if form:
        kwargs.pop('form')

        if 'pool' in form.cleaned_data:
            return {'pool_id' : form.cleaned_data['pool'].id }

        return kwargs
    return {}

А затем используйте эти данные в методе ваших ресурсов after_import_instance для установки этого значения

def after_import_instance(self, instance, new, row_number=None, **kwargs):
    pool_id = kwargs.get('pool_id')
    instance.pool_id = pool_id
    instance.created_at = timezone.now()

Тогда ошибка отсутствия поля (не нулевого) исчезнет.

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