503👍
You can use Form.initial
, which is explained here.
You have two options either populate the value when calling form constructor:
form = JournalForm(initial={'tank': 123})
or set the value in the form definition:
tank = forms.IntegerField(widget=forms.HiddenInput(), initial=123)
58👍
Other solution: Set initial after creating the form:
form.fields['tank'].initial = 123
- [Django]-Best practices for getting the most testing coverage with Django/Python?
- [Django]-Google Static Maps URL length limit
- [Django]-Django py.test does not find settings module
25👍
If you are creating modelform from POST values initial can be assigned this way:
form = SomeModelForm(request.POST, initial={"option": "10"})
https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#providing-initial-values
- [Django]-Django: manage.py does not print stack trace for errors
- [Django]-Annotate with latest related object in Django
- [Django]-New url format in Django 1.9
19👍
I had this other solution (I’m posting it in case someone else as me is using the following method from the model):
class onlyUserIsActiveField(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(onlyUserIsActiveField, self).__init__(*args, **kwargs)
self.fields['is_active'].initial = False
class Meta:
model = User
fields = ['is_active']
labels = {'is_active': 'Is Active'}
widgets = {
'is_active': forms.CheckboxInput( attrs={
'class': 'form-control bootstrap-switch',
'data-size': 'mini',
'data-on-color': 'success',
'data-on-text': 'Active',
'data-off-color': 'danger',
'data-off-text': 'Inactive',
'name': 'is_active',
})
}
The initial is definded on the __init__
function as self.fields['is_active'].initial = False
- [Django]-Macros in django templates
- [Django]-Convert Django Model object to dict with all of the fields intact
- [Django]-Changing a project name in django
19👍
As explained in Django docs, initial
is not default
.
-
The initial value of a field is intended to be displayed in an HTML . But if the user delete this value, and finally send back a blank value for this field, the
initial
value is lost. So you do not obtain what is expected by a default behaviour. -
The default behaviour is : the value that validation process will take if
data
argument do not contain any value for the field.
To implement that, a straightforward way is to combine initial
and clean_<field>()
:
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput(), initial=123)
(...)
def clean_tank(self):
if not self['tank'].html_name in self.data:
return self.fields['tank'].initial
return self.cleaned_data['tank']
- [Django]-How to loop over form field choices and display associated model instance fields
- [Django]-Troubleshooting Site Slowness on a Nginx + Gunicorn + Django Stack
- [Django]-Django: remove a filter condition from a queryset
2👍
If you want to add initial value and post other value you have to add the following :
or None
after request.POST
form = JournalForm(request.POST or None,initial={'tank': 123})
If you want to add files or images also
form = JournalForm(request.POST or None,request.FILES or None,initial={'tank': 123})
- [Django]-Django storages aws s3 delete file from model record
- [Django]-How do I run tests for all my Django apps only?
- [Django]-Allowing only super user login
1👍
I hope this can help you:
form.instance.updatedby = form.cleaned_data['updatedby'] = request.user.id
- [Django]-How can I avoid "Using selector: EpollSelector" log message in Django?
- [Django]-Create custom buttons in admin change_form in Django
- [Django]-Django Form File Field disappears on form error
0👍
I also encountered the need to set default values in the form during development. My solution is
initial={"":""}
form=ArticleModel(request.POST)
if form.has_changed():
data = {i: form.cleaned_data[i] for i in form.changed_data}
data.update({key: val for key, val in init_praram.items() if key not in form.changed_data})
use form.has_changed ,if form.fields is required you can use this method
- [Django]-Django – how to unit test a post request using request.FILES
- [Django]-Django project models.py versus app models.py
- [Django]-Sending post data from angularjs to django as JSON and not as raw content
0👍
How I added the initial to the form:
I read @Sergey Golovchenko answer.
So I just added it to the form in if request.method == 'POST':
.
But that’s not where you place it, if you want to see what value it got before posting the form.
You need to put it in the form where the else is.
Example here from views.py
def myForm(request):
kontext = {}
if request.method == 'POST':
# You might want to use clean_data instead of initial here. I found something on a stack overflow question, and you add clean data to the Forms.py, if you want to change the post data. https://stackoverflow.com/questions/36711229/django-forms-clean-data
form = myModelForm(request.POST, initial={'user': request.user})
if form.is_valid():
form.save()
return redirect('/')
else:
# you need to put initial here, if you want to see the value before you post it
form = myModelForm(initial={'user': request.user})
kontext['form'] = form
return render(request, 'app1/my_form.html', kontext)
- [Django]-How to use refresh token to obtain new access token on django-oauth-toolkit?
- [Django]-What's the difference between select_related and prefetch_related in Django ORM?
- [Django]-Django-celery: No result backend configured
0👍
Posting another solution i came up with:
template.html:
<form id="myForm" method="post">
{% csrf_token %}
{{ form.media }}
{{ form.well_id.label_tag }}
{{ form.well_id }}
{{ form.tube_id.label_tag }}
{{ form.tube_id }}
<button type="submit" >Run Analysis</button>
</form>
<script type="text/javascript">
$(document).ready(function() {
$("#id_well_id").select2();
$("#id_tube_id").select2();
{% if request.method == 'GET' %} // Because id_tube_id is a 'required' form field, we need to initialize a null parameter to show the placeholder.
$("#id_tube_id").val(null);
$("#id_tube_id").trigger('change');
{% endif %}
});
</script>
The reasoning behind using this method and not the pure python based methods posted above was that I had set the tube_id field to be a required form field but not the well_id field. Apparently, if you assign a field to be required, it is being prefilled with the first value in your list of choices, unless specified otherwise by an initial value.
But in my case, i didn’t want an initial value – i just wanted the initial value to be None. Django can assign a choice as an initial value only if it allready exists in your list of choices, so if you would assign None as an initial value, it would just show the first item on the list.
The solution is therefore to assign an initial value through javascript (in my case, i needed it to happen only if request.method == ‘GET’).
- [Django]-Django storages: Import Error – no module named storages
- [Django]-Django. A good tutorial for Class Based Views
- [Django]-How to upload a file in Django?