Как создать 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>

========= Вывод ===============

все города

enter image description here

после ввода ключевого слова

enter image description here

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