Populate a django form with data from database in view

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


Take a look at this example in the Django documentation:

  • http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#a-full-example

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:

  • http://www.mail-archive.com/[email protected]/msg48058.html
  • http://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ModelChoiceField