由于在使所有内容完全按我的要求工作方面存在一些困难,我决定不使用Django表单视图来获取数据,而是从在html中创建的选择表单中检索数据。我只在检索数据,但是由于我是新手,所以我不知道自己不知道什么。这是可以接受的方式吗?
views.py
def compare_view(request):
query = models.Package.objects.all().order_by('make_model__v_make') \
.annotate(make=F('make_model__v_make')) \
.annotate(model=F('make_model__v_model'))
choice1 = request.GET.get('choice1')
choice2 = request.GET.get('choice2')
default = models.Package.objects.get(pk=9)
if request.GET:
try:
result1 = models.Package.objects.get(pk=choice1)
except models.Package.DoesNotExist:
result1 = default
try:
result2 = models.Package.objects.get(pk=choice2)
except models.Package.DoesNotExist:
result2 = default
try:
vehicle1 = models.Vehicle.objects.get(pk=result1.make_model.pk)
except models.Vehicle.DoesNotExist:
vehicle1 = None
try:
vehicle2 = models.Vehicle.objects.get(id=result2.make_model.pk)
except models.Vehicle.DoesNotExist:
vehicle2 = None
else:
result1 = None
result2 = None
vehicle1 = None
vehicle2 = None
return render_to_response('main/vehicle_compare.html',
{'query':query, 'result1':result1, 'result2':result2,
'vehicle1': vehicle1, 'vehicle2': vehicle2})
html
<form name="vform" class="compare-form" method="get">
<select id="selection1" class="form-control" name="choice1">
<option value="" selected disabled>Select Vehicle 1</option>
{% for q in query %}
<option value="{{q.pk}}"
{% ifequal q.pk result1.pk %}selected{% endifequal %}>
{{ q.make }} {{ q.model }} {{ q.name }}
</option>
{% endfor %}
</select>
<input id="compare-btn" value="COMPARE" type="submit">
<select id="selection2" class="form-control" name="choice2">
<option value="" selected disabled>Select Vehicle 2</option>
{% for q in query %}
<option value="{{q.pk}}"
{% ifequal q.pk result2.pk %}selected{% endifequal %}>
{{ q.make }} {{ q.model }} {{ q.name }}
</option>
{% endfor %}
</select>
</form>