Forms.pyに次のようなフォームがあります。
from Django import forms
class ItemList(forms.Form):
item_list = forms.ChoiceField()
Item_listにデータベースのデータを入力する必要があります。 HTMLで生成された場合、item_listは次のようになります。
<select title="ItemList">
<option value="1">Select Item 1</option>
<option value="2">Select Item 2</option>
</select>
クエリの変数は頻繁に変更されて新しい結果が生成されるため、selectステートメントのオプション値はほぼ毎回変更されます。
ItemListにデータベースの値を入力するには、view.pyとテンプレートファイルに何を入れる必要がありますか?
Djangoドキュメントのこの例を見てください:
基本的に、Fieldオブジェクトでqueryset
キーワード引数を使用して、データベースから行を取得できます。
class BookForm(forms.Form):
authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all())
更新
動的なモデル選択フィールドが必要な場合は、フォームのコンストラクターでアイテムIDを渡し、それに応じてクエリセットを調整できます。
class ItemForm(forms.Form):
# here we use a dummy `queryset`, because ModelChoiceField
# requires some queryset
item_field = forms.ModelChoiceField(queryset=Item.objects.none())
def __init__(self, item_id):
super(ItemForm, self).__init__()
self.fields['item_field'].queryset = Item.objects.filter(id=item_id)
P.S.私はこのコードをテストしておらず、正確な設定についてはわかりませんが、主なアイデアが出てくることを願っています。
リソース:
あなたがする必要があるのは、あなたが実際にどのオブジェクトを望んでいるかを見つけることです。 「Upvote-if-u-like!」という名前の本を見つけたい場合その後、あなたのurls.pyは好きになるはずです
urlpatterns = [
path('textshare/<str:slug>',views.extract,name="textshare"),]
誰かがmybook.com/textshare/upvote-if-u-like!/を検索するとき
それは彼/彼女をviews.pyに連れて行きます
def extract(request,slug):
context={}
obj=bookForm.objects.get(title=slug)
form=bookModelForm(instance=obj)
context={'form':form}
return render(request,'bookfound.html',context)
ここで、bookFormはModels.pyにあり、bookModelFormはforms.pyにあります。HappyDjangoing:)