Объекты отображаются под выпадающим полем формы
Я создал форму, которая создает новый объект модели, в которой есть одно поле, которое является выпадающим, поскольку это внешний ключ в модели, но объекты также отображаются ниже поля вместе с выпадающим полем.
Модель:
class Vehicle(models.Model):
type = models.ForeignKey(VehicleType, on_delete=models.CASCADE)
number = models.CharField(max_length=10)
Вид:
def request_cabbie_upgrade(request):
if request.method == 'POST':
vehicle_form = VehicleForm(request.POST)
if vehicle_form.is_valid():
vehicle = vehicle_form.save(commit=False)
vehicle.save()
cabbie_request = CabbieRequest(user=request.user, vehicle=vehicle)
cabbie_request.save()
return redirect('PassengerDashboard')
else:
vehicle_form = VehicleForm()
return render(request, 'users/cabbie_request.html', {'vehicle_form': vehicle_form, 'user': request.user})
Форма:
class VehicleForm(forms.ModelForm):
type = forms.ModelChoiceField(queryset=VehicleType.objects.all(), empty_label="Vehicle Type")
class Meta:
model = Vehicle
fields = ['type', 'number']
Шаблон:
{% extends "base.html" %}
{% block title %}
<title>Cabbie Dashboard</title>
{% endblock title %}
{% block body %}
<div class="container mt-5 pt-5 cabbie-dashboard-container">
<div class="row">
<div class="col-md-12">
<h2>Cabbie Information</h2>
<div class="card">
<div class="card-body">
<p><strong>Username:</strong> {{ cabbie.username }}</p>
<p><strong>First Name:</strong> {{ cabbie.first_name }}</p>
<p><strong>Last Name:</strong> {{ cabbie.last_name }}</p>
<p><strong>Email:</strong> {{ cabbie.email }}</p>
<p><strong>Phone:</strong> {{ cabbie.phone }}</p>
</div>
</div>
</div>
<div class="col-md-12 mt-4">
<h2>Request Cabbie Upgrade</h2>
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="id_type">Vehicle Type:</label>
{{ vehicle_form.type }}
</div>
<div class="form-group">
<label for="id_number">Vehicle Number:</label>
{{ vehicle_form.number }}
</div>
<button type="submit" class="btn btn-primary">Submit Request</button>
</form>
</div>
</div>
</div>
{% endblock body %}
Я ожидал, что он будет просто выпадать.
Если я правильно понял ваш вопрос, проблема заключается в том, что вам нужно определить __str__
функцию для ваших моделей, чтобы Django знал, что отображать в выпадающем списке:
# models.py
class VehicleType(models.Model):
type = models.CharField(max_length=20)
def __str__(self):
return f'{self.type}'
class Vehicle(models.Model):
type = models.ForeignKey(VehicleType, on_delete=models.CASCADE)
number = models.CharField(max_length=10)
def __str__(self):
return f'{self.number}: {self.type.type}'