Как создать запись модели из результата поиска в 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