我正在创建一个简单的2页网站,允许用户在首页上使用下拉框或HTML选择表单(制作,模型,修剪)来获取有关将存储在数据库中的汽车的信息。按下搜索按钮后,用户将被带到提供车辆信息的页面。关于如何将这些下拉框链接到Django数据库中的数据,我感到非常困惑。
我的cardetails应用程序的models.py中的Car模型到目前为止看起来像这样:
class Car(models.Model):
make = models.CharField(max_length=50)
model = models.CharField(max_length=50)
trim = models.CharField(max_length=50)
# other info here.
# Return the actual name of the car instead of "model-object"
def __str__(self):
return self.make + " " + self.model + " " + self.trim
谷歌搜索让我采用这种方式设置一个ModelForm,它位于主页应用的forms.py中:
from django import forms
from cardetails.models import Car
class CarForm(ModelForm):
allCars = forms.ModelChoiceField(queryset=Car.objects.all())
在我拥有的3个下拉框中,“make”的下拉框在主页的html模板中看起来如此:
<span style="display:inline-block">
<select class="form-control" id="make">
{% for car in allCars %}
<option>{{ car.make }}</option>
{% endfor %}
</select>
<label for="make" style="display:block">Make</label>
</span>
视图为:
from django.shortcuts import render
def index(request):
return render(request, 'search/index.html')
但是,“make”下拉框中没有任何内容。我想要做的是使用下拉框可以选择数据库中所有汽车的所有品牌,型号和装饰。
答案 0 :(得分:1)
您可以获取所选汽车的PK或ID,并将其传递到您希望用户所在的下一个视图:
在你的template.html中
<form method='post' action=''>
<select class="form-control" id="make" name='selected_car'>
{% for car in allCars %}
<option value='{{car.id}}'>{{ car.make }}</option>
{% endfor %}
</select>
</form>
查看template.html在你的view.py
中
def allCars(request):
.....your code here to get all car....
if request.POST:
car_id = request.POST['selected_car']
redirect('name-url',car_id=car_id)
def carDetails(request,car_id):
selected_car = Car.objects.get(pk=car_id)
context = {}
template = 'car_detail.html'
render(request, template, context)
希望这会对你有所帮助。