Загрузка данных внешнего ключа в выпадающем имени select слишком медленная

Я пытаюсь показать данные по внешнему ключу в виде выпадающего списка, но у нас большие данные, проблема в том, что требуется слишком много времени для загрузки страницы, на которой есть выпадающее поле с внешним ключом, есть ли способ загружать его по частям? вот мой models.py

class Vistor(models.Model):
admin = models.ForeignKey(User,on_delete=models.PROTECT,default=1)
full_name = models.CharField(max_length=150,verbose_name=_('full name'))
dob = models.DateField(max_length=14,verbose_name=_('dob'))
city = models.ForeignKey(City,on_delete=models.CASCADE,verbose_name=_('city'))

class Meta:
    constraints = [
        models.UniqueConstraint(fields=['full_name','dob','city'],name='full_information')
    ]

def __str__(self):
    return f'{self.full_name} - {self.city} - {self.dob}'

и вот мой views.py

def add_new_post(request):
    ...
    context = {
        'form':form,
        'room_number':room_number,
        'cities':City.objects.all(),
        'all_guests':Vistor.objects.all().order_by('-pk'), #the problem is here, has a big data
        }

    return render(request,'booking/add_booking.html',context)        

и вот мои шаблоны

      <div class="grid md:grid-cols-10 md:gap-5 child_formset_row" id="guests_no-${form_no}">
        <div class="col-span-5 groupinput relative bglightpurple mt-2 rounded-xl">
            <label class="text-white absolute top-1 mt-1 mr-2 text-xs">{% trans "full information" %}</label>
            <select name="guestinfo-0" id="guestinfo-0" class="visitors w-full pr-2 pt-6 pb-1 bg-transparent focus:outline-none text-white">
                <option value="-----">------</option>
                {% for c in all_guests %}
                <option value="{{ c.full_name }} - {{c.city}} - {{c.dob | date:'Y-m-d'}}">{{ c.full_name }} - {{c.city}} - {{c.dob | date:'Y-m-d'}}</option>
                {% endfor %}                                    
            </select>
        </div>    
        <div class="col-span-4 groupinput relative bglightpurple mt-2 rounded-xl">
            <label class="text-white absolute top-1 mt-1 mr-2 text-xs">{% trans "reason" %}</label>
            <input type="text" name="reason-0" id="reason-0" value="" required class="w-full pr-2 pb-1  pt-6 bg-transparent focus:outline-none text-white">
        </div> 
        <button type='button' class="col-span-1 flex items-center justify-center groupinput relative bglightpurple mt-2 rounded-xl" onclick="remove_form(this,${form_no})"><i class="text-red-600 far fa-trash-alt"></i></button>
        
    </div>  

есть ли способ загрузить его по частям, пожалуйста? большое спасибо за вашу помощь ..

Вы можете использовать django-autocomplete-light наряду с использованием форм Django для отображения этого элемента.

Это дает выпадающий список с возможностью поиска и прокрутки, который загружает ваши данные с концепцией пагинации.

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