web-dev-qa-db-ja.com

Djangoデータベース値から入力されたChoiceField

ChoiceFieldを使用してデータベースに値のドロップダウンリストを作成する際に問題が発生しました。これがコードのスニペットです

from Django import forms
from testplatform.models import ServiceOffering

class ContactForm(forms.Form):

    subject = forms.ChoiceField(queryset=ServiceOffering.objects.all())
    #subject = forms.ModelMultipleChoiceField(queryset=ServiceOffering.objects.all())

#subject ....行は機能しますが、ChoiceField(queryset ....)行を使用すると、次のエラーが発生します。

__init__() got an unexpected keyword argument 'queryset'

何か案は?

16
Oli

ChoiceFieldにはクエリセットがありません。あなたはModelChoiceFieldを探しています

30
Chris Pratt

データベースからドロップダウンリストにデータを入力する場合は、views.pyからテンプレートに単一のオブジェクトのすべての値を渡すことをお勧めします。これは次の方法で実行できます。1]データベースからすべての値をフェッチします。

objectlist = ModelName.objects.all()

ドロップダウンリストに並べ替えられたリストが必要な場合は、次のようにします。

objectlist = ModelName.objects.all().order_by('fieldname')

個別リストが必要な場合は、次のようにします。

objectlist = ModelName.objects.distinct('fieldname')

2]これを渡すと、この「オブジェクトリスト」がテンプレートとともにレンダリングされます

return render(request, 'template.html', {'objectlist': objectlist})

3]テンプレートではselectタグを使用し、userforループではオブジェクトリストを反復処理します。

<select>


{% for element in objectlist %}


<option value={{ element.id }}>{{ element.name }}



     </select>

オプションタグの値は、APIで処理する必要があるものによって異なります

7
Vishal Mopari

ModelChoiceFieldここにリンク を使用します

ChoiceFieldはクエリセットをサポートしていません

3
Jubin Thomas

view.py:-これは私のview.pyファイルです。そして、以下のコードを作成します。

def add_customer(request):
    objectlist = Vehicle.objects.values('brand_name').distinct().order_by('brand_name')
    if request.method == 'POST':
        form = CustomerForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/show-customers')
    else:
        form = CustomerForm()
    return render(request, 'add-customer.html', {'form':form, 'objectlist':objectlist})

Customer.html

<select name="prefer_car_model" id="id_prefer_car_model" required>
                <option value="0" selected disabled> Select Car model </option>
                {% for obj in objectlist %}
                <option value="{{ obj.brand_name }}">{{ obj.brand_name }} </option>
                {% endfor %}
            </select>

出力

VMS - Vehicle Brand Name Lists

1

Django 2+では、「queryset」の代わりに「choices」を使用できます

0
David Barenco