2017-05-31 8 views
0

モデルフォームがあり、データベースからselectオプションを設定するためのドロップダウンを取得しようとしています。モデルフォームのgroup_byにクエリ結果を取得し、selectに配置します

マイモデルフォームは次のようになります。

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) 

選択オプションがありますが、彼らは私が後だ何でない結果を与えます。このような選択一見のオプション:私はこれを実現するために、いくつかの異なる方法を試してみたが、私は、私は「感じ

Location A 
Location B 
Location C 

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

私はちょうどのみに表示を選択したいです私は何かを逃した。

編集:

マイレージ・モデルは、次のようになります。

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

と何をしようとしているのModelFormをクエリセットでvaluesを使用するか、または使用しないでください?そのコードを投稿してください。 2つの選択フィールドがあることを伝えます。 – Exprator

+0

私はいくつかの試みをうまくやったことがありません。本質的にこのコードだけを少し変更しただけで、最終的に無駄なことが判明する小さな変更です。 – Hanny

+0

ちょうど私に事を教えて、2つのフィールドは2つの異なる結果を持っていますか? {'start_location': 'Location A'、 'num_locations':27}これは1つのフィールドに対して全体的に表示されますか? – Exprator

答えて

0

私は私のクエリセットを変更することで、この作業を取得することができました。

.valuesの代わりに.values_list('start_location', flat=True)に変更しました。これで、選択フォームに適切な名前のリストが表示されます。

+0

レンダリングされたオプションの 'value'として' id'を使うには、 '.values_list( 'id'、 'start_location'、flat = True)'を使う必要があるかもしれません。 –

0

同じモデルの異なるプロパティを持つ2つの選択肢を表示するとします。既定では、ModelChoiceFieldは、annotateの前にvaluesを呼び出しているため、QuerySet値の__str__メソッドを使用しています。

ではなくModelChoiceField

+0

ええ - 私は 'values_list'を使ってリストを取得し、それを平坦化してタプルの代わりにリスト形式で純粋な値を得ることができることを知りました。ありがとう! – Hanny

関連する問題