2017-05-31 24 views
0

我有一個模型表單,我試圖從數據庫中選擇一個下拉式選項。以模型形式獲取查詢結果至group_by,並將其置於選擇中

我的模型形式如下:

class CreateTripsForm(forms.Form): 
    start_locations = Mileage.objects.values('start_location').annotate(num_locations=Count('start_location')).order_by('start_location') 
    end_locations = Mileage.objects.values('end_location').annotate(num_locations=Count('end_location')).order_by('end_location') 
    starting_location = forms.ModelChoiceField(queryset=start_locations, empty_label=None) 
    ending_location = forms.ModelChoiceField(queryset=end_locations, empty_label=None) 

選擇選項是有的,但他們給出的結果是不是我後。在選擇看起來像這樣的選項:

{'start_location': 'Location A', 'num_locations': 27} 
{'start_location': 'Location B', 'num_locations': 27} 
{'start_location': 'Location C', 'num_locations': 27} 

我只是想選擇僅顯示:

Location A 
Location B 
Location C 

我已經嘗試了許多不同的方式來做到這一點,但我覺得我」我錯過了什麼。

編輯:

里程模式是這樣的:

class Mileage(models.Model): 
    miles = models.DecimalField(max_digits=8, decimal_places=1) 
    start_location = models.CharField(max_length=255) 
    end_location = models.CharField(max_length=255) 
    user_id = models.IntegerField(null=True) 

    def __str__(self): 
     return self.miles 
+0

和你嘗試過什麼?發佈該代碼。也告訴有2個選擇字段,這是返回哪個答案? – Exprator

+0

我已經嘗試了一些不成功的事情 - 非常小的變化,最終會證明這裏沒有任何結果,因爲它們基本上只是這些代碼的小改動。 – Hanny

+0

只是告訴我一件事,2場有2個不同的結果吧? {'start_location':'地點A','num_locations':27}或者這是整個一個字段? – Exprator

回答

0

我能夠改變我的查詢集得到這個工作。

而不是使用.values我將它更改爲.values_list('start_location', flat=True)現在它給我的名單我想要在選擇形式適當。

+0

也許你需要使用'.values_list('id','start_location',flat = True)',在呈現的選項中使用'id'作爲'value'。 –

0

您想要顯示具有相同模型的不同屬性的兩個選擇。默認情況下,ModelChoiceField使用QuerySet值的__str__方法,因爲您在annotate之前調用values

不要在查詢集使用values,或者使用的,而不是ModelFormModelChoiceField

+0

是的 - 我現在可以看到我可以使用'values_list'來獲取一個列表並壓扁它,以獲得列表格式中的純粹值而不是元組。謝謝! – Hanny

相關問題