1
votes

Comment effacer uniquement un champ spécifique d'un formulaire après soumission?

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,
    })


1 commentaires

Consultez ce fil de discussion: stackoverflow.com/questions/813418/...


3 Réponses :


0
votes
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,
    })

0 commentaires

0
votes

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 = '';


0 commentaires

2
votes

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.


0 commentaires