Виджет внешнего ключа находит более 1 значения, как я должен подойти к этому

#django #django-models #django-import-export

#django #django-модели #django-импорт-экспорт

Вопрос:

Я использую библиотеку django-import-export и пытаюсь реализовать виджет ForeignKey, который доступен для поиска связанных объектов с помощью Author.name вместо Author.pk. Теперь, вот сложная часть, для данного календарного года у меня есть только один автор с таким же именем, однако в следующем году имя автора будет похожим. Когда я пытаюсь импортировать, конечно, возникает проблема, в которой говорится, что более Author.name было найдено.

Есть ли предложение по решению проблемы?

Ответ №1:

Я использовал before_save_instance() , чтобы сделать что-то подобное этому. Вот некоторый псевдокод для того, как это может работать:

 class MyModelResource(ModelResource):
    # Specify fields and Meta information here
    def before_save_instance(self, instance, using_transactions, dry_run):
        # Replace the below with your actual code
        year = instance.year
        author = Author.objects.filter(year=year)
        instance.author = author
        return instance
  

Это предполагает, что информация, необходимая для получения правильного автора, доступна в импортируемой строке.

Комментарии:

1. Большое вам спасибо за вашу помощь! Итак, как мне скоротать год? Должен ли я создать другую строку и удалить ее в before_save_instance?

2. @bisamov Это зависит от вашей конкретной ситуации, но в какой бы логике вам ни требовалось выполнить, вы можете сделать это в before_save_instance() . Если вы знаете, что год всегда будет текущим годом, например, вам не нужно было бы иметь отдельный столбец year, и вы могли бы просто фильтровать datetime.now().year .

3. Я пытаюсь это реализовать, но не могу сделать это правильно. У вас случайно нет ресурса, на который я мог бы взглянуть?

4. Может ли класс FullNameForeignKeyWidget (ForeignKeyWidget): использоваться для ограничения запроса на определенный год?