109👍
If you want to set the default initial value you should be defining initial
like other form fields except you set it to the id instead.
Say you’ve got field1
like this:
class YourForm(forms.Form):
field1 = forms.ModelChoiceField(queryset = MyModel.objects.all() )
then you need to set initial when you create your form like this:
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
rather than:
form = YourForm(initial = {'field1': instance_of_mymodel })
I’m also assuming you’ve defined __unicode__
for your models so this displays correctly.
30👍
You can just use
field1 = forms.ModelChoiceField(queryset=..., initial=0)
to make the first value selected etc. It’s more generic way, then the other answer.
- [Django]-Run Django shell in IPython
- [Django]-Accepting email address as username in Django
- [Django]-How to make two django projects share the same database
11👍
The times they have changed:
The default initial value can now be set by defining initial
like other form fields except you set it to the id instead.
Now this will suffice:
form = YourForm(initial = {'field1': instance_of_mymodel })
Though both still work.
- [Django]-Detect django testing mode
- [Django]-Adding django admin permissions in a migration: Permission matching query does not exist
- [Django]-Django admin, hide a model
5👍
The code
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
and
form = YourForm(initial = {'field1': instance_of_mymodel })
or initial field directly following:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
All work.
The first two ways will override the final way.
- [Django]-How to repeat a "block" in a django template
- [Django]-Django logging of custom management commands
- [Django]-Django test RequestFactory vs Client
3👍
field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")
It’s as simple as that….!
- [Django]-Using a UUID as a primary key in Django models (generic relations impact)
- [Django]-Django's ManyToMany Relationship with Additional Fields
- [Django]-Run Django shell in IPython
0👍
Just want to add this answer after stumbling on this question. I know it works on Django 3.2, at least.
If you have some calculated value in the __init__
method, you can do this to set the initial value at instantiation as well:
def __init__(self, value, *args, **kwargs):
# super call, etc.
self.do_something(value)
self.fields['field'].initial = value
If the form does multiple things with value
, it’s a bit more DRY to pass it only once instead of redundantly with the initial
kwarg in instantiation.
- [Django]-Data Mining in a Django/Postgres application
- [Django]-Whats the difference between a OneToOne, ManyToMany, and a ForeignKey Field in Django?
- [Django]-How to go from django image field to PIL image and back?
-1👍
You could do this as well:
form = YourForm(initial = {'field1': pk })
if you are parsing your primary key through a query string or via an ajax call no need for an instance, the query set has already handled that for your drop down, the pk indexes the state you want
- [Django]-Django admin and MongoDB, possible at all?
- [Django]-Count() vs len() on a Django QuerySet
- [Django]-CORS error while consuming calling REST API with React