0

CharField 'name' でクエリセットを並べ替えようとしていますが、'Other' エントリを除外して、ユーザーが選択できる最後のオプションとして追加したいと考えています...

self.fields["acquisition"].queryset = AcquisitionChannel.objects.exclude(name = "Other").order_by('name')

上記は「その他」を除外しているため、明らかに良くありません...

Djangoでそれを行うことができますか? またはJavascriptを使用する必要がありますか?

ありがとう!

4

3 に答える 3

0

それは次のようなものです:

def get_choices():
    choices = AcquisitionChannel.objects.exclude(name = "Other").order_by('name').values_list('value_column', 'text_column')
    other = AcquisitionChannel.objects.filter(name = "Other").values_list('value_column', 'text_column')
    choices = list(choices)
    other = list(other)
    return choices + other

それから:

acquisition = forms.ChoiceField(choices=get_choices())
于 2013-09-24T19:01:29.563 に答える
0

オブジェクトを QuerySet に手動で追加するには、次のことを試してください_result_cache

other = AcquisitionChannel.objects.get(name="Other")    
objs = AcquisitionChannel.objects.exclude(name="Other").order_by("name")
len(objs) #hit the db to evaluate the queryset.
objs = objs._result_cache.append(other)
self.fields["acquisition"].queryset = objs
于 2013-09-24T14:17:38.877 に答える
0

すばやく簡単: 次orderを使用して、特別な値を取る列を追加しますextra()

self.fields["acquisition"].queryset = (
    AcquisitionChannel.objects
    .extra(select={'order': '(CASE name WHEN %s THEN 1 ELSE 0 END)'},
           select_params=['Other'],
           order_by=['order', 'name']))

を使用するparamsと、このメソッドは任意の DB (をサポートするCASE) で機能します。

于 2013-09-24T14:40:33.080 に答える