Як створити CreateView, який шукає інформацію через HTMX і динамічно оновлює форму?
Я новачок у python та Django. Також новачок у StackOverflow... Я намагаюся створити CreateView з формою, яка містить кнопку для пошуку інформації за допомогою GET-запиту з використанням HTMX. Спочатку користувач побачить повністю порожню форму. Після введення певного поля (в даному випадку серійного номера), він може натиснути кнопку, яка ініціює пошук/GET запит. Після того, як інформація буде отримана за допомогою GET, я хотів би оновити певні поля у формі деякою інформацією з GET (по суті, як автозаповнення). Наразі я зміг створити початковий CreateView (який є простим) і налаштувати кнопку, яка виконує HTMX GET запит; я також зміг отримати необхідну інформацію, але я застряг на тому, щоб оновити/вставити значення, отримані в певні поля форми після GET запиту. Які кроки я повинен зробити, щоб впоратися з цією конкретною частиною? Я спробував додати форму до подання, яке керує HTMX-запитом на отримання, і присвоїти деякі з «початкових» значень, пізніше отримати форму зі значеннями, визначеними як «початкові», і передати форму до Http-відповіді, але це не працює так, як передбачалося. Приклад нижче:
class LookupView(View):
def get(self, request, *args, **kwargs):
if request.htmx:
form = AddItemForm()
#GET request actions go here that fetch info that is assigned to variables to be used in form
data = {'field1': field1value,'field2': field2value}
form = AddItemForm(initial=data)
return HttpResponse(form)
else:
return HttpResponse('No value provided')
<<<Заздалегідь
дякуємо за допомогу та поради!The common approach is to simply return the options as an html snippet (which htmx expects). So, you may have a partial like
partials/select.html
:
{% for option in options %}
\<option value="{{option.value}}"\>{{option.label}}\</option\>
{% endfor %}
Then your LookupView
can return it with the options filtered based on the parameters you are getting.
LookupView(View):
def get(self, request, \*args, \*\*kwargs) ...
options = your_filtered_values here # maybe a queryset from the database?
response = render(request," partials/select.html", dict(options=options))
\# set response headers to control where and how to place the returned template
response\["Hx-Retarget"\] = "css_selector_of_the_target"
response\["Hx-Reswap"\] = "innerHTML"
return response