Django dynamic forms - on-the-fly field population?

前端 未结 2 971
清酒与你
清酒与你 2020-12-24 13:39

I\'ve been scanning through Django documentation, and Google search results, all afternoon and I\'m still somewhat stuck in my attempt to create a dynamic form. I\'m hoping

2条回答
  •  情歌与酒
    2020-12-24 14:11

    I do a similar thing here, populating a form based on a selection in a drop down. Maybe this helps you.

    Here is the model of the values used to pre-populate the form:

    class OpmerkingenGebrek(models.Model):
        opmerking = models.CharField(max_length=255)
        advies = models.CharField(max_length=255)
        urgentiecodering = models.CharField(max_length=2, choices=URGENTIE_CHOICES_2011)
        bepaling = models.CharField(max_length=155,blank=True,null=True)
        aard = models.CharField(max_length=3, choices=AARD_CHOICES)
    

    The view that manages the form:

    def manage_component(request,project_id,.....):
        # get values for pre-populate
        og = OpmerkingenGebrek.objects.all()
        .........
        formset = ComponentForm(request.POST,request.FILES)
        .........
            )))
        return render_to_response(template, {
            'formset':formset,
            ........
            'og':og,
            },context_instance=RequestContext(request))
    

    The html the renders the form

    {% extends "base.html" %}
    {% block extra_js %}
    
    
    {% endblock %}
    
    {{ formset.as_table }}

    Choose default values:

    The javascript that pre-populates the form:

    function getValue(sel)

      {
        //get values
        var opm = sel.options[sel.selectedIndex].value;
        //split string to parts
        var parts = opm.split("|");
        // autofill form
        var opmerking = document.getElementById("id_opmerking");
        opmerking.value = parts[0];
        var aanbeveling = document.getElementById("id_aanbeveling");
        aanbeveling.value = parts[1];
        var opt = document.getElementById("id_urgentie");
        var urgentie = opt.selectedIndex;
        for(var i=0;i

提交回复
热议问题