Как реализовать Django queryset в HTML datalist
Я создаю свою собственную ERP-систему, и она у меня полностью работает. У меня есть проблема, в которой пользователь не может найти статьи, которые он хочет добавить в заказ. Поэтому я решил попробовать сделать это на 100% с помощью HTML.
Моя идея заключается в следующем:
В файле forms.py я определил свой набор запросов статей следующим образом:
self.fields['article'].queryset = Article.objects.filter(deleted=False)
Тогда мои виджеты выглядят следующим образом :
'article' : forms.TextInput(attrs={'type': 'input', 'list':articles})
Список статей:
<!-- Datalists -->
<datalist id="articles">
{% for article in articles %}
<option value='{{article.id}}'>[{{article.articlenumber}}] {{article.name}}</option>
{% endfor %}
</datalist>
Затем в форме articleid отправляется как article. Я подхватываю это, и в моих представлениях происходит следующее:
article = request.POST.get('article')
article = Article.objects.get(id=article)
Во время создания этого вопроса я решил свои собственные проблемы. Итак, что вам нужно сделать в вашем файле forms.py, так это :
class Meta:
## Your own models and include/excludes here ##
widgets = {
'article' : forms.TextInput(attrs={'type': 'input', 'list':'articles', 'autocomplete': 'off'}),
}#Autocomplete off just to only show real articles when clicking in the input
В файле template.html вы добавляете это, чтобы создать список данных, который был определен в файле forms.py.
Я добавил это в верхнюю часть файла, значение id в datalist должно быть точно таким же, как атрибут list на виджете в вашем forms.py:
<datalist id="articles">
{% for article in articles %}
<option value='{{article.id}}'>[{{article.articlenumber}}] {{article.name}}</option>
{% endfor %}
</datalist>
Затем в файле views.py вы добавляете :
articles = Article.objects.filter(deleted=False)
#form.is_valid() starts here:
article = request.POST.get('article')
article = Article.objects.get(id=article)
neworderline = neworderlineform.save(commit=False)
neworderline.article = article
## all other stuff you want to do
neworderlineform.save()
Не забудьте добавить статьи в контекст, чтобы ваш шаблон мог получить эти данные. Если что-то непонятно, дайте мне знать!