如何在 Django 中以相同的 POST 形式从多个下拉列表中获取多个值
How to take multiple value from multiple drop downs in the same POST form in Django
您好,我正在 Django 中创建电影图书系统,用户必须从两个下拉菜单中 select 一部电影及其 date/time。我的问题是它只拍摄电影而不是 date/time。我想知道如何以相同的形式添加这两个。
谢谢
html 文件:
<form action="/booking" method="post">
{% csrf_token %}
<div class="movie-container">
<label>Pick a film:</label>
<select name="selectedFilm">
{% for showing in showings %}
<option value="{{ showing.film }}" name="film">{{ showing.film }}</option>
{% endfor %}
</select>
<br>
<br>
<label>Pick a time:</label>
<select id="selectedDate">
{% for showing in showings %}
<option value="{{ showing.date_time }}" name="date">{{ showing.date_time }}</option>
{% endfor %}
</select>
<br>
<div class="btn-layer">
<input type="submit" value="Select">
</div>
</div>
</form>
表单文件
class SelectedFilmForm(forms.Form):
selectedFilm = forms.CharField(required=True)
selectedDate = forms.DateTimeField(required=True, input_formats=["%Y-%m-%dT%H:%M", ])
enter code here
模型文件
class Film(models.Model):
name = models.CharField(verbose_name='Film name', max_length=30)
age_rating = models.CharField(verbose_name='Age rating', max_length=5, choices=AgeRatings, default='U')
duration = models.DecimalField(verbose_name='Duration (minutes)', max_digits=4, decimal_places=1, blank=True, null=True)
description = models.CharField(verbose_name='Description', max_length=500, blank=True, null=True)
image = models.ImageField(upload_to='films',default='null')
def __str__(self):
return self.nameclass
Screen(models.Model):
screen_id = models.CharField(verbose_name='Screen ID', max_length=30)
capacity = models.IntegerField(verbose_name='Capacity')
def __str__(self):
return self.screen_id
class Showing(models.Model):
film = models.ForeignKey(Film, on_delete=models.CASCADE, verbose_name='Film', blank=True, null=True)
date_time = models.DateTimeField()
screen = models.ForeignKey(Screen, on_delete=models.CASCADE, verbose_name='Screen', blank=True, null=True)
def __str__(self):
return self.film.name
和我的观点文件
def booking(request):
if request.method == "POST":
form = SelectedFilmForm(request.POST)
d = request.POST.get('selectedDate')
f = request.POST.get('selectedFilm')
print("Here", f)
print("Here", d)
if form.is_valid():
print(form.errors)
f = form.cleaned_data['selectedFilm']
d = form.cleaned_data['selectedDate']
print("Here", f)
print("Here", d)
# genderselect = form.cleaned_data['genderselect']
# request.session["genderselect"] = request.POST['genderselect']
request.session["selectedFilm"] = request.POST['selectedFilm']
request.session["selectedDate"] = request.POST['selectedDate']
else:
form = SelectedFilmForm()
film = request.session.get('selectedFilm')
date = request.session.get('selectedDate')
print("Here", film)
print("Here", date)
return render(request, "booking.html", {'film': film})
您还没有为 selectedDate 下拉菜单命名。请注意,您的电影下拉菜单具有名称属性并且有效。尝试
<select id="selectedDate" name="selectedDate">
这将使您的视图能够拉取选择。
此外,最好删除选项中的名称属性:
<option value="{{ showing.film }}" name="film"
它不是一个适合选项的属性,可能会造成混淆。
您好,我正在 Django 中创建电影图书系统,用户必须从两个下拉菜单中 select 一部电影及其 date/time。我的问题是它只拍摄电影而不是 date/time。我想知道如何以相同的形式添加这两个。 谢谢
html 文件:
<form action="/booking" method="post">
{% csrf_token %}
<div class="movie-container">
<label>Pick a film:</label>
<select name="selectedFilm">
{% for showing in showings %}
<option value="{{ showing.film }}" name="film">{{ showing.film }}</option>
{% endfor %}
</select>
<br>
<br>
<label>Pick a time:</label>
<select id="selectedDate">
{% for showing in showings %}
<option value="{{ showing.date_time }}" name="date">{{ showing.date_time }}</option>
{% endfor %}
</select>
<br>
<div class="btn-layer">
<input type="submit" value="Select">
</div>
</div>
</form>
表单文件
class SelectedFilmForm(forms.Form):
selectedFilm = forms.CharField(required=True)
selectedDate = forms.DateTimeField(required=True, input_formats=["%Y-%m-%dT%H:%M", ])
enter code here
模型文件
class Film(models.Model):
name = models.CharField(verbose_name='Film name', max_length=30)
age_rating = models.CharField(verbose_name='Age rating', max_length=5, choices=AgeRatings, default='U')
duration = models.DecimalField(verbose_name='Duration (minutes)', max_digits=4, decimal_places=1, blank=True, null=True)
description = models.CharField(verbose_name='Description', max_length=500, blank=True, null=True)
image = models.ImageField(upload_to='films',default='null')
def __str__(self):
return self.nameclass
Screen(models.Model):
screen_id = models.CharField(verbose_name='Screen ID', max_length=30)
capacity = models.IntegerField(verbose_name='Capacity')
def __str__(self):
return self.screen_id
class Showing(models.Model):
film = models.ForeignKey(Film, on_delete=models.CASCADE, verbose_name='Film', blank=True, null=True)
date_time = models.DateTimeField()
screen = models.ForeignKey(Screen, on_delete=models.CASCADE, verbose_name='Screen', blank=True, null=True)
def __str__(self):
return self.film.name
和我的观点文件
def booking(request):
if request.method == "POST":
form = SelectedFilmForm(request.POST)
d = request.POST.get('selectedDate')
f = request.POST.get('selectedFilm')
print("Here", f)
print("Here", d)
if form.is_valid():
print(form.errors)
f = form.cleaned_data['selectedFilm']
d = form.cleaned_data['selectedDate']
print("Here", f)
print("Here", d)
# genderselect = form.cleaned_data['genderselect']
# request.session["genderselect"] = request.POST['genderselect']
request.session["selectedFilm"] = request.POST['selectedFilm']
request.session["selectedDate"] = request.POST['selectedDate']
else:
form = SelectedFilmForm()
film = request.session.get('selectedFilm')
date = request.session.get('selectedDate')
print("Here", film)
print("Here", date)
return render(request, "booking.html", {'film': film})
您还没有为 selectedDate 下拉菜单命名。请注意,您的电影下拉菜单具有名称属性并且有效。尝试
<select id="selectedDate" name="selectedDate">
这将使您的视图能够拉取选择。
此外,最好删除选项中的名称属性:
<option value="{{ showing.film }}" name="film"
它不是一个适合选项的属性,可能会造成混淆。