2012-06-30 79 views
1

所以我有一个叫做Car的模型,它带有一个Manufacturer模型的外键。我还有一个CarCharacterisitcs模型,其外键为Car如何使用Django中的外键获取级联下拉选择框?

这是代码的样子:

class Car(models.Model): 
    idcar = models.AutoField(primary_key=True) 
    manufacturer = models.ForeignKey(Manufacturer, null=True, blank=True, on_delete=models.SET_NULL) 
    name = models.CharField(max_length=765) 

class Manufacturer(models.Model): 
    idmanufacturer = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=765) 

class CarCharacteristics(models.Model): 
    idcar_characteristics = models.AutoField(primary_key=True) 
    car = models.ForeignKey(Car, on_delete=models.PROTECT) 

我在做一个页面,让你添加CarCharacteristics

这是我的表单和视图:

class CarCharacteristicsForm(ModelForm): 
    class Meta: 
     model = CarCharacterisitics 

def add_car_characteristics(request): 
    if request.method == 'POST': 
     car_char_form = CarCharacterisiticsForm(request.POST) 
     if car_char.is_valid(: 
      car_char_form.save() 
      return HttpResponseRedirect('/cars/car-characterisitcs') 
    else: 
     car_char_form = CarCharacterisiticsForm() 
    return render(request, 'car_characteristics/add_car_characteristics.html',{'car_char_form': car_char_form,}) 

在我的HTML页面,我有这样的:

<h1>Car Characteristics</h1> 
<form action="." method="POST"> 
{% csrf_token %} 
    <table id="characteristics_table"> 
     <tr> 
     <td> 
     <table id="car_characterisitcs_table"> 
      <td>{{ char_char_form.as_table }}</td> 
     </table> 
     </td> 
     </tr> 
    </table> 
    <p><input type="submit" value="Submit"></p> 
</form> 

当显示这种形式,我有一个下拉选择字段与所有我的可能的Car模型。我想要的是有两个选择字段。我希望第一个让您能够选择Manufacturer,然后第二个显示具有该制造商的所有可能的Cars。然后,当您提交表单时,它会将您选择的Car分配给CarCharacterisitcs模型的外键。

如果你去看看Advance Auto Parts,当你点击“你的车”时,这就是我想要的。我怎么做?

+0

几个以前的答案,可能有助于http://stackoverflow.com/questions/10214618/creating-dynamic-dropdown-options-based-off-dropdown-selection-stuck和http://stackoverflow.com/questions/ 1914358/django-chain-select and http://stackoverflow.com/questions/3233850/django-jquery-cascading-select-boxes – PhoebeB

回答

0

您需要使用AJAX来获取选定制造商的数据并相应地填充汽车字段。这需要在视图代码内完成,并将汽车提取的数据返回到模板中,并使用模板语言填充该字段。