115π
Try:
form = MyForm({'charfield1': 'foo', 'charfield2': 'bar'})
The constructor of Form
objects can take a dictionary of field values. This creates a bound form, which can be used to validate the data and render the form as HTML with the data displayed. See the forms API documentation for more details.
Edit:
For the sake of completeness, if you do not want to bind the form, and you just want to declare initial values for some fields, you can use the following instead:
form = MyForm(initial={'charfield1': 'foo', 'charfield2': 'bar'})
See the documentation of initial values for details.
34π
There are two ways of populating a Django form.
The first is to pass a dictionary as the first argument when you instantiate it (or pass it as the data
kwarg, which is the same thing). This is what you do when you want to use POST data to populate and validate the form.
data_dict = {'charfield1': 'data1', 'charfield2': 'data2', 'choicefield': 3}
form = MyForm(data_dict)
However, this will trigger validation on the form, so only works if you are actually passing in valid and complete data to begin with β otherwise you will start off with errors.
The other way to populate a form is to use the initial
parameter (documented here). This gives initial values for the form fields, but does not trigger validation. Itβs therefore suitable if youβre not filling in all values, for example.
form = MyForm(initial=data_dict)
To populate a choicefield via initial
, use the pk value.
- [Django]-Django admin: how to sort by one of the custom list_display fields that has no database field
- [Django]-Django-DB-Migrations: cannot ALTER TABLE because it has pending trigger events
- [Django]-Convert Django Model object to dict with all of the fields intact
15π
You can use model_to_dict() to convert an instance to a dictionary, and then populate a form with that. Something like this should work:
from django.forms.models import model_to_dict
...
my_obj = MyModel.objects.get(abc=123)
form = MyForm(initial=model_to_dict(my_obj))
Note: Iβm using django version 1.3
- [Django]-Django β limiting query results
- [Django]-Using django-admin on windows powershell
- [Django]-How to make two django projects share the same database
5π
For what itβs worth, the FormView
class-based view way to do this would be to override the FormView
βs get_initial
function. get_initial
returns the initial keyword arguments used by get_form_kwargs
to instantiate the form.
Docs:
Sample code:
from django.views.generic.edit import FormView
class MyFormView(FormView):
def get_initial(self):
initial = super(MyFormView, self).get_initial()
# update initial field defaults with custom set default values:
initial.update({'charfield1': 'foo', 'charfield2': 'bar'})
return initial
- [Django]-How can I return HTTP status code 204 from a Django view?
- [Django]-How to produce a 303 Http Response in Django?
- [Django]-Add inline model to django admin site