2017-01-10 46 views
0

我是Django的新手,我嘗試使用複選框創建多選。問題是,我發現的所有例子都有固定的選項,這些選項在表單中指定,我不需要。Django:使用不固定的選項檢查多個選項

更具體,讓這是一個簡單的汽車經銷店的應用程序的模型:

class CarBrand(models.Model): 
    name = model.CharField() 

class CarModel(models.Model): 
    name = model.CharField() 
    brand = model.ForeignKey(CarBrand) 

我的目標是當我進入頁面的奧迪,我得到的選項A3,A4,A5,但是當我進入寶馬頁面,我可以選擇M3,M4,M5。點擊提交後,它應該發送所有選定的車型。

+0

固定選擇是什麼意思?通常所有的複選框都有相應實例的ID,所以它們不是固定的。 –

+0

我的意思是,我沒有一個靜態字典的選擇。選擇取決於哪些用戶已登錄,以及他/她打開了哪個頁面。例如,如果BMW頁面打開,M3,M4,M5將作爲選項,但如果打開Audi頁面,則會顯示其他選項。 – makons

回答

1

給形式的__init__方法得到了CarBrand作爲參數,然後將查詢集的基礎上,要選擇:

class CarForm(forms.Form): 
    def __init__(self, car_brand, *args, **kwargs): 
     self.fields['cars'] = forms.ModelMultipleChoiceField(
      queryset=CarModel.objects.filter(brand=car_brand), 
      widget=forms.CheckboxSelectMultiple) 
     super(CarForm, self).__init__(*args, **kwargs) 

現在您的看法得到相關CarBrand實例頁面首先,使用CarForm(car_brand, request.POST)等創建表格。

+0

這正是我所需要的。謝謝。 – makons

+0

如何訪問模板中的CarModel字段?我只獲得了choice_label,但我需要爲每個選項設置其他字段。我正在嘗試實現這樣的功能:https://postimg.org/image/trj07ajgj/ – makons