Как реализовать 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()

Не забудьте добавить статьи в контекст, чтобы ваш шаблон мог получить эти данные. Если что-то непонятно, дайте мне знать!

Вернуться на верх