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

发布于 2024-10-13 19:49:11 字数 510 浏览 1 评论 0原文

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

I have a form in my forms.py that looks like this:

from django import forms

class ItemList(forms.Form):
     item_list = forms.ChoiceField()

I need to populate the item_list with some data from the database. When generated in HTML item_list should be something like:

<select title="ItemList">
   <option value="1">Select Item 1</option>
   <option value="2">Select Item 2</option>
</select>

The options values in my select statement will change almost every time since a variable in the query will often change generating new results.

What do I need to put in the view.py and also in my template files to populate the ItemList with values from the database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

硬不硬你别怂 2024-10-20 19:49:11

看一下 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)

PS 我还没有测试过这个代码,我不确定你的确切设置,但我希望主要思想能够得到体现。

资源:

Take a look at this example in the Django documentation:

Basically, you can use the queryset keyword argument on a Field object, to grab rows from your database:

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

Update

If you need a dynamic model choice field, you can hand over your item id in the constructor of the form and adjust the queryset accordingly:

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. I haven't tested this code and I'm not sure about your exact setup, but I hope the main idea comes across.

Resources:

羁绊已千年 2024-10-20 19:49:11

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

What you need to do is to find out which object do you actually want for e.g. if you want to find out a book named "Upvote-if-u-like!" then your urls.py should like

urlpatterns = [
path('textshare/<str:slug>',views.extract,name="textshare"),]

now when someone will search for mybook.com/textshare/upvote-if-u-like!/

it will take him/her to views.py which would look like

def extract(request,slug):
    context={}

    obj=bookForm.objects.get(title=slug)
    form=bookModelForm(instance=obj)

    context={'form':form}
    return render(request,'bookfound.html',context)

where bookForm is in Models.py and bookModelForm is in forms.py
Happy Djangoing:)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文