【问题标题】:Populate a django form with data from database in view在视图中使用数据库中的数据填充 django 表单
【发布时间】:2011-06-14 22:31:24
【问题描述】:

我的 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?

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    查看 Django 文档中的这个示例:

    基本上,您可以在 Field 对象上使用 queryset 关键字参数,从数据库中获取行:

    class BookForm(forms.Form):
        authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all())
    

    更新

    如果需要动态模型选择字段,可以在表单的构造函数中交出你的item id,并相应调整queryset:

    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)
    

    附:我还没有测试过这段代码,我不确定你的确切设置,但我希望能理解主要思想。

    资源:

    【讨论】:

    • 问题是我所有的逻辑都发生在 view.py 而不是 forms.py 中。查询集看起来更像这个 Items.objects.filter(item_id = id)。 “id”变量在 view.py 中生成。
    • 如果给 bookform 构造函数添加另一个参数会怎样?
    • @The MYYN 我认为我们很接近。那么如何从我的 view.py 中插入 item_id 值?
    • @itgorilla:我不知道你的代码,但每当你调用类似myform = ItemForm() 的东西时,只需传递item_idmyform = ItemForm(item_id)。快乐的黑客攻击。
    【解决方案2】:

    您需要做的是找出您真正想要的对象,例如如果您想找到一本名为“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:)

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 2017-01-15
      相关资源
      最近更新 更多