Как создать поле ввода автозаполнения в форме с помощью DjangoPython

Программы на Python
Ответить
Anonymous
 Как создать поле ввода автозаполнения в форме с помощью Django

Сообщение Anonymous »

Я новичок в django и его методах. Я пытаюсь создать поле автозаполнения для формы. Мой код следующий:

forms.py

Код: Выделить всё

from django import forms

class LeaveForm(forms.Form):
leave_list = (
('Casual Leave', 'Casual Leave'),
('Sick Leave', 'Sick Leave')
)
from_email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'style': 'width: 400px'}))
start_date = end_date = forms.CharField(widget=forms.TextInput(attrs={'type': 'date', 'style': 'width: 175px'}))
leave_type = forms.ChoiceField(choices=leave_list, widget=forms.Select(attrs={'style': 'width: 400px'}))
comments = forms.CharField(required=True, widget=forms.Textarea(attrs={'style': 'width: 400px; height: 247px'}))

def clean_from_email(self):
data = self.cleaned_data['from_email']
if "@testdomain.com" not in data:
raise forms.ValidationError("Must be @testdomain.com")
return data
Я хочу добиться того, чтобы, когда пользователь вводит слова в поле «Из электронной почты», список электронных писем, которые я сохранил во внешней базе данных, должен появляться в списке автозаполнения.

models.py

Код: Выделить всё

from django.db import models

class ListOfUsers(models.Model):
emp_number = models.CharField(db_column='Emp_Number', primary_key=True, max_length=50, unique=True)  # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=40)  # Field name made lowercase.
supervisor = models.CharField(db_column='Supervisor', max_length=40)  # Field name made lowercase.
email = models.CharField(db_column='Email', max_length=50, blank=False, null=False, unique=True)  # Field name made lowercase.

class Meta:
managed = False
db_table = 'List of users'
Есть идеи, как это можно сделать?

Обновление:

Я начал возиться с django-autocomplete-light и теперь могу получить ответ по URL-адресу автозаполнения. Выглядит это так

Код: Выделить всё

{"results": [{"id": "user1@mydomain.com", "text": "user1@mydomain.com"}, {"id": "user2@mydomain.com", "text": "user2@mydomain.com"}, {"id": "user3@mydomain.com", "text": "user3@mydomain.com"}]}
views.py

Код: Выделить всё

class EmailAutocomplete(autocomplete.Select2ListView):
def get_list(self):
qs = ListOfUsers.objects.using('legacy')

if self.q:
qs = qs.filter(email__icontains=self.q).values_list('email', flat=True)

return qs
Я до сих пор не знаю, как сделать так, чтобы эти данные отображались в поле «from_email»
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»