Как создать запись модели из результата поиска в Django?

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

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

Поток того, что я пытаюсь достичь, следующий: Показать пользователю поле поиска > получить запрос (это будет уникальный ID) > вызвать внешний скрипт с этим запросом, получить данные одной записи > разбить данные на поля формы (диктант?) > предварительно заполнить форму > показать пользователю предварительно заполненную форму для просмотра > пользователь отправляет (или не отправляет).

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

Вот что у меня есть на данный момент: Модель:

class Organism(models.Model):
genbank = models.CharField(max_length = 10, primary_key=True, unique=True)
genus = models.CharField(max_length = 50)
species = models.CharField(max_length = 50)
strain = models.CharField(max_length = 50)
organism_sequence = models.TextField()
created_at = models.DateTimeField(auto_now_add = True)
fasta = models.FileField(upload_to='organism_fasta/', null=True, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.SET_NULL, null=True)

class Meta:
    ordering = ["-genus"]

def __str__(self):
    return self.genus[:10] + ', ' + self.species[:10] + ', ' + self.strain[:10]
        
def get_absolute_url(self):
    return reverse('organism_detail', args=[str(self.genbank)])

Вид:

#Create
class OrganismCreateView(LoginRequiredMixin, CreateView):
    model = Organism
    form_class = OrganismForm #forms.py
    login_url = '/login'
    
    # Add the user to the object
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())

Форма:

class OrganismForm(forms.ModelForm):
    class Meta:
        model = Organism
        fields = ['genbank', 'genus', 'species', 'strain', 'organism_sequence', 'fasta']
        labels = {
            'genbank': 'Genbank Accession Number',
            'genus': 'Genus',
            'species': 'Species',
            'strain': 'Strain',
            'organism_sequence': "ITS Region Sequence",
            'fasta': "Fasta file",
        }

Общее представление поиска, которое я использовал для тестирования:

class SearchResultsListView(ListView):
    model = Organism
    context_object_name = 'organisms'
    template_name = 'library/search_results.html'
    
    def get_queryset(self):
        query = self.request.GET.get('q') #get the value q from the form submission
        orgs = Organism.objects.filter(
           Q(genus__icontains=query) | Q(strain__icontains=query) | Q(species__icontains=query)
        )
        return orgs
Вернуться на верх