2016-05-25 11 views
0

Ich mache eine einfache 2-seitige Website, die den Benutzer Dropdown-Boxen oder HTML-Select-Formulare (Marke, Modell, Trimmen) auf der Titelseite verwenden können, um Informationen über eine Auto, das in einer Datenbank gespeichert wird. Nach dem Drücken einer Suchtaste wird der Benutzer auf die Seite weitergeleitet, die Informationen über das Fahrzeug bereitstellt. Ich bin sehr verwirrt darüber, wie ich diese Dropdown-Boxen mit Daten aus der Datenbank in Django verlinke.Ziehen Sie ausgewählte Formularoptionen aus der Datenbank in Django

Das Auto-Modell Ich habe liegt in der models.py meiner cardetails App und sieht wie folgt aus bisher:

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 

Googeln über mich in Formen auf diese Art und Weise führte eine Modelform, bis der Einstellung, die wohnt Py der Homepage App:

from django import forms 
from cardetails.models import Car 

class CarForm(ModelForm): 
    allCars = forms.ModelChoiceField(queryset=Car.objects.all()) 

von der 3 Drop-Down-Box ich habe, die man für "make" sieht aus wie so in der hTML-Vorlage von der Homepage:

   <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> 

Die Ansicht, für die ist:

from django.shortcuts import render 

    def index(request): 
    return render(request, 'search/index.html') 

scheint jedoch nichts in der Dropdown-Box "machen". Was ich tun möchte, ist, dass alle Marken, Modelle und Trimmungen aller Autos in der Datenbank über die Dropdown-Boxen auswählbar sind.

+0

trösten Sie allCars? Abfrage wird korrekt abgerufen? –

+0

Wie bezieht sich Ihr Formular auf den Vorlagencode, den Sie angezeigt haben? Vielleicht möchten Sie Ihre Ansicht zeigen. – Sayse

Antwort

1

Sie die pk oder die ID des ausgewählten Auto bekommen und es in die nächste Ansicht übergeben, wo Sie Ihre Benutzer würde sein wollen:

In Sie

<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

In Sie

Ansicht für 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) 


Ansicht für car_detail.html
def carDetails(request,car_id): 
    selected_car = Car.objects.get(pk=car_id) 
    context = {} 
    template = 'car_detail.html' 
    render(request, template, context) 

Hope this Ihnen helfen.

+0

Das macht Sinn und wird definitiv helfen, danke. – sidp

Verwandte Themen