Как создать charfield с предложениями в формах django?
Я хочу создать в форме django поле ввода charfield с предложениями. По сути, мне нужно поле выбора, которое также позволяет вам написать свое собственное значение, если это необходимо. Другими словами, гибрид между charfield и полем выбора. Есть предложения, как этого добиться?
class PDFClassificationForm(forms.ModelForm):
nature = forms.CharField(required=False)
class Meta:
model = Documents
fields = [,
'nature',]
labels = {,,
'nature':'Nature/Concerne:',
}
widgets = {
'dateenvoi' : DatePickerInput(),
}
def __init__(self, uuid_pdf, *args, **kwargs):
super(PDFClassificationForm, self).__init__(*args, **kwargs)
if Documents.objects.get(uuid=uuid_pdf).id_emetteur:
nature_choices= Archivagerecurrencelibelle.objects.filter(Q(id_emetteur=Documents.objects.get(uuid=uuid_pdf).id_emetteur) & Q(source="Nature")).values_list('concerne','concerne')
self.fields['nature'].choices = nature_choices
Вы можете попробовать с этим https://github.com/jazzband/django-taggit. Я использовал его в похожем случае, вы можете передать белый список "тегов" в качестве предложения или заполнить его уже используемыми тегами, при этом позволяя создавать новые значения
----------- models.py -------
from django.db import models
ct = (('Ahmedabad','Ahmedabad'),('Surat','Surat'),('Vadodara','Vadodara'),('Rajkot','Rajkot'))
class EmployeeModel(models.Model):
name = models.CharField(max_length=255)
age = models.PositiveIntegerField()
city = models.CharField(max_length=255,choices=ct)
def __str__(self):
return self.name
----------- form.py -------
from django import forms
from .models import EmployeeModel
class EmployeeFrom(forms.ModelForm):
class Meta:
model = EmployeeModel
fields = "__all__"
widgets = {
'name':forms.TextInput(attrs={'class':'form-control'}),
'age':forms.NumberInput(attrs={'class':'form-control'}),
'city':forms.Select(attrs={'class':'form-select'}),
}
----------- Html код для формы -----------
<div class="modal-body">
<form action="" method="POST">
{% csrf_token %}
<div class="mb-3">
<label class="form-label">{{form.name.label}}</label>
{{form.name}}
</div>
<div class="mb-3">
<label class="form-label">{{form.age.label}}</label>
{{form.age}}
</div>
<div class="mb-3">
<label class="form-label">{{form.city.label}}</label>
<input class="form-select" placeholder="--- Select city ---" name="city" type="text" list="cities">
<datalist id="cities">
{% for i in form.city %}
<option>{{i}}</option>
{% endfor %}
</datalist>
</div>
<button class="btn btn-primary" type="submit">Add Employee</button>
</form>
</div>
========= Вывод ===============
все города
после ввода ключевого слова