Как создать выпадающий список в формах в django со значениями из базы данных

Я пытаюсь создать форму с выпадающим полем, в котором пользователь может выбрать местоположение из предварительно существующих мест в таблице.Застрял на том, что делать

forms.py

from django import forms
from .models import Vehicles
from .models import HomeLocation

class VehicleForm(forms.ModelForm):
    HomeLocation= forms.ModelChoiceField (queryset=HomeLocation.objects.all(),
        empty_label="Select a home location"  # Optional
    )
    class Meta:
        model = Vehicles
        feilds=['home_location','model','make','year']
        exclude = ['Location lat', 'Location long']

model.py


from django.db import models

class HomeLocation(models.Model):
        home_location_id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=255)
        address = models.CharField(max_length=255)
     
class Vehicles(models.Model):
        vehicle_id = models.AutoField(primary_key=True)
        home_location = models.ForeignKey(HomeLocation, models.DO_NOTHING)
        model = models.CharField(max_length=255)
        make = models.CharField(max_length=255)
        year = models.IntegerField() 

views.py

from django.shortcuts import render
from .models import Vehicles
from .models import HomeLocation
from .forms import VehicleForm
from django.contrib import messages
from django.http import HttpResponse

# Create your views here.

def addVehicle(request):
    if request.method =="POST":
        form = VehicleForm(request.POST or None)
        if form.is_valid():
            form.save()
        messages.success(request,("Vehicle has been added successfully"))
    else:
        return render(request,'add_vehicle.html',{})

add_vehicle.html

<form method="POST" action= "{% url 'addVehicle' %}">
  {% csrf_token %}
  <div class="form-header">
    <h1>Add Vehicle</h1>
    </div>
  
    <div class="form-group">
      <div class="mb-3">
        <select>
          {% for i in HomeLocation %}
              <option value="{{ i.home_location_id }}"> {{ i.name }} </option>
          {% endfor %}
          </select>
    </div></div>

Это то, что я сделал до сих пор. Но в выпадающем списке не видно данных, как видно. Что мне нужно сделать.

В самом простом виде это то, что вы хотите сделать

В вашем файле forms.py

class VehicleForm(forms.ModelForm):
    class Meta:
        model = Vehicles
        fields = ['home_location ','model','make','year',]
        required = ('home_location ','model','make','year',)

в вашем файле views.py:

    if request.method =='POST':
        form = VehicleForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('<your success redirect link>')
    form=VehicleForm()
    context = {'form': form,}
    return render(request, '<path-to add_vehicle.html>',context)

в вашем шаблоне:

<form method="POST" action= "">
  {% csrf_token %}
  <div class="form-header">
    <h1>Add Vehicle</h1>
    </div>
    <div class="form-group">
      <div class="mb-3">
       {{form}}
    </div></div>

Еще несколько пунктов: вам не нужны эти поля в ваших моделях: home_location_id и vehicle_id эти поля будут сгенерированы автоматически и на них можно ссылаться как <object>.id

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