Как включить итераторы с выбором модели в представления
Я изучал поля формы в документации django Итерация отношений выбора, но нашел это немного трудным для понимания. Я хочу разработать поле формы с итератором, в котором в select я получаю название круиза, в опциях для data-ship_name
я получаю соответствующие названия кораблей, а для text я получаю пункты назначения. Однако я не уверен, как внедрить форму в views/html.
Вот что я пробовал:
models.py
from django.db import models
class Cruises(models.Model):
id = models.CharField(db_column='ID', primary_key=True, max_length=200) # Field name made lowercase.
title = models.CharField(max_length=200, blank=True, null=True)
ship_name = models.CharField(max_length=200, blank=True, null=True)
class Meta:
managed = False
db_table = 'items'
def __str__(self):
return self.title
class Destination(models.Model):
destination = models.ForeignKey(Cruises, on_delete=models.CASCADE, blank=True, null=True)
#destination = models.CharField(max_length=200, blank=True, null=True)
views.py
from django.shortcuts import render
from .models import Cruises
def basic(request):
#form_destination = Cruises
long_list = Cruises.objects.values('title', 'ship_name')
return render(request, 'cruises/basic.html', context = {'long_list':long_list})
forms.py
from django import forms
from cruises.models import Cruises, Destination
class CruiseSelect(forms.Select):
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
option = super().create_option(name, value, label, selected, index, subindex, attrs)
if value:
option['attrs']['data-ship_name'] = value.instance.ship_name
return option
class destinationForm(forms.ModelForm):
class Meta:
model = Destination
fields = ['destination']
widgets = {'destination': Cruises}
basic.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Cruises</title>
</head>
<body>
<h1> Cruise Control </h1>
<form action="/action_page.php">
<label for='destination'>Destination</label>
<input type="text" list="destination" />
<datalist id="destination">
{% for lng_l in long_list %}
<option>{{lng_l.title}}</option>
{% endfor %}
</datalist>
<!label for="cruisetime">Departure date</label>
<!input type="date" id="cruisetime" name="cruisetime" min={{dep_l.departureDate}}>
<!input type="submit">
</form>
</body>
</html>
Я получаю выпадающий список названий и имен кораблей, но я хочу выбрать выпадающий список пунктов назначения - как достичь этого с помощью форм/представлений?