[Django]-Populate a django form with data from database in view

41👍

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:

👤miku

2👍

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:)

Leave a comment