Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Populate a django form with data from database in view

Tags:

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?

like image 207
avatar Avatar asked Jan 25 '11 02:01

avatar


People also ask

How does Django get data from database?

The database view is created by following the SQL and it can be injected into a customized data migration with the raw SQL execution command. The next step is to create a Django model which maps to this view so we can use Django ORM to retrieve the data from the view.

How do you receive data from a Django form with a post request?

Using Form in a View In Django, the request object passed as parameter to your view has an attribute called "method" where the type of the request is set, and all data passed via POST can be accessed via the request. POST dictionary. The view will display the result of the login form posted through the loggedin.


2 Answers

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
like image 80
miku Avatar answered Oct 18 '22 23:10

miku


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

like image 22
MbeforeL Avatar answered Oct 19 '22 00:10

MbeforeL