J'ai un formulaire avec quelques champs. La plupart du temps, les gens n'ont besoin de changer qu'un seul champ à chaque fois qu'ils soumettent, pas tous, donc j'aimerais le changer de telle manière que lors de la soumission, seul le champ Employé est effacé, mais le choix de la zone de travail et le poste ( s'il y en a de disponibles) restent sélectionnés.
Comment pourrais-je changer la façon dont le formulaire est traité pour qu'il ne soit pas complètement effacé lors de la soumission? Je sais que le form = WarehouseForm () est ce qui l'efface, mais je ne sais pas comment je pourrais simplement spécifier que je veux seulement effacer le champ employee_number .
views.py
def enter_exit_area(request):
enter_without_exit = None
exit_without_enter = None
if request.method == 'POST':
form = WarehouseForm(request.POST)
if form.is_valid():
emp_num = form.cleaned_data['employee_number']
area = form.cleaned_data['work_area']
station = form.cleaned_data['station_number']
if 'enter_area' in request.POST:
# Submission logic
form = WarehouseForm()
elif 'leave_area' in request.POST:
# Submission logic ..
form = WarehouseForm()
else:
form = WarehouseForm()
return render(request, "operations/enter_exit_area.html", {
'form': form,
'enter_without_exit': enter_without_exit,
'exit_without_enter': exit_without_enter,
})
3 Réponses :
form_obj = form.save(commit=False)
form_obj.employee_number = '' # if you want to clear employee_number field
form_obj.save()
Note:- 'employee_number' field should be null=True in models.py, so that you can clear the field
For Example:-
def enter_exit_area(request):
enter_without_exit = None
exit_without_enter = None
if request.method == 'POST':
form = WarehouseForm(request.POST)
if form.is_valid():
emp_num = form.cleaned_data['employee_number']
area = form.cleaned_data['work_area']
station = form.cleaned_data['station_number']
if 'enter_area' in request.POST:
# Submission logic
form_obj = form.save(commit=False)
form_obj.employee_number = '' # if you want to clear employee_number field
elif 'leave_area' in request.POST:
# Submission logic ..
form_obj = form.save(commit=False)
form_obj.employee_number = '' # if you want to clear employee_number field
form_obj.save()
else:
form = WarehouseForm()
return render(request, "operations/enter_exit_area.html", {
'form': form,
'enter_without_exit': enter_without_exit,
'exit_without_enter': exit_without_enter,
})
S'il s'agit d'une zone de texte de type d'entrée, vous pouvez également le faire en javascript, comme ci-dessous:
par exemple: document.getElementById ("formFieldId"). value = '';
Vous pouvez utiliser l ' initial argument:
if 'enter_area' in request.POST:
# Submission logic
form = WarehouseForm(initial={'employee_number': '', 'work_area': area, 'station_number': station})
Notez que le champ numéro_employé est vide.
Vous n'avez pas inclus votre logique de soumission, votre implémentation peut donc être légèrement différente. Mais le principe est le même.
Consultez ce fil de discussion: stackoverflow.com/questions/813418/...