使用数据库中的数据填充django表单

时间:2011-01-25 02:36:01

标签: django django-forms django-views

我的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语句中的选项值几乎每次都会改变,因为查询中的变量通常会改变生成新结果。

我需要在view.py和模板文件中放置什么来用数据库中的值填充ItemList?

2 个答案:

答案 0 :(得分:29)

在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。我没有测试过这段代码,我不确定你的确切设置,但我希望主要想法能够实现。

资源:

答案 1 :(得分:0)

您需要做的是找出您实际想要的对象,例如如果您要查找一本名为“ 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中 快乐的Djangoing:)