Ausblenden eines Felds aus einem django modelform

Der django-Dokumentation schlägt vor, ich kann erkennen, verdeckte /sichtbare Felder aus, die in meiner Vorlage. Ich habe zwei Modelle, AddressInfo und PharmacyInfo. Ich muss zu geben Sie die Daten für die beiden Tabellen aus einer einzigen Seite. Ich will zu verstecken, das Feld address_id (aus der PharmacyInfo Modell). Ich habe derzeit:

    {% for form in formset %}
    {% if form.non_field_errors %}
        <div class="form_errors">
            {{ form.non_field_errors }}
        </div>
    {% endif %}

    {% for field in form.visible_fields%}
        <div class="field_content">                  
                <label>{{field.label_tag }}</label>
        <div class="field">

            {% if field.help_text %}
            <div class = "help_text">
                {{ field.help_text }}
            </div>
            {% endif %}               
                {{ field }}
                {{ field.errors }}
        </div> 
        </div>
    {% endfor %}
{% endfor %}



class PharmForm(ModelForm):
    class Meta:
        model = PharmInfo
        widgets = {
            'address_id': forms.HiddenInput()
        }



class AddressForm(ModelForm):
    class Meta:
        model = AddressInfo



class AddressInfo(models.Model):
    address_id = models.AutoField(primary_key=True)

    address_1 = models.CharField("Address Line 1", max_length = 64)
    address_2 = models.CharField("Address Line 2", max_length = 64, blank=True, null=True)
    address_3 = models.CharField("Address Line 3", max_length = 64, blank=True, null=True)
    address_4 = models.CharField("Address Line 4", max_length = 64, blank=True, null=True)
    town_city = models.CharField("Town or City", max_length = 32)
    post_code = models.CharField("Post Code", max_length = 8)
    phone = models.CharField("Phone Number - numbers 0-9 only", 
                        max_length = 16) #this must be numeric 0-9 only for auto-dial functionality.
    email = models.CharField("email address", max_length = 64) #must be valid email



class PharmInfo(models.Model):
    pharm_id = models.AutoField(primary_key=True)
    pharm_name = models.CharField("Pharamcy Name", max_length = 64)
    address_id = models.ForeignKey(AddressInfo, db_column="address_id")



def pharmView (request, id=None):
    pharmForm = PharmForm()
    addForm = AddressForm()
    if request.method == 'POST': #this is a form submission
        if id == None: #it's a new record
            pharmForm = PharmForm(request.POST)
            addForm = AddressForm(request.POST)
            if addForm.is_valid(): #add the address_id into the pharmForm.
                request.POST = request.POST.copy()
                request.POST['address_id'] = addForm.save().pk
                pharmForm = PharmForm(request.POST)
                if pharmForm.is_valid(): 
                    pharm = pharmForm.save()
                    return render_to_response('thanks.html', 
                        {'form1': pharmForm,
                         'form2': addForm},
                        context_instance=RequestContext(request),
                    )

        else: #it's an existing record
            pharm = PharmInfo.objects.get(pk=id)
            address = pharm.address_id
            pharmForm = PharmForm(request.POST, instance = pharm)
            addForm = AddressForm(request.POST, instance = address)
            if pharmForm.is_valid() and addForm.is_valid():
                pharmForm.save()
                addForm.save()
                return render_to_response('updateThanks.html',
                    {'form1': pharmForm,
                     'form2': addForm},
                    context_instance=RequestContext(request),
                )
    else: 
        if id != None: #form bound to a pharmacy record
            pharm = PharmInfo.objects.get(pk=id)
            address = pharm.address_id
            pharmForm = PharmForm(instance = pharm)
            addForm = AddressForm(instance = address)
            return render_to_response('institutions/pharm.html', 
                {'form1': pharmForm,
                 'form2': addForm},
                context_instance=RequestContext(request),
                )            

    return render_to_response('institutions/pharm.html', 
            {'form1': pharmForm,
             'form2': addForm},
            context_instance = RequestContext(request),
        )

Diesem code verbirgt sich das Eingabefeld für das Feld address_id aber das label ist immer noch gezeigt. Ich will zu verstecken, die ganze div-aber " form.visible_fields' nicht ohne es aus der Ausgabe entfernt. Dies treibt mich Nüsse. Kann mir jemand sagen, wie daneben das Feld address_id in einer Weise sichtbar, die zu der Vorlage.

Vor langer Zeit hatte ich ähnliche Probleme. Ich landete eine Unterklasse von Formen.Form angegeben, welche Felder angezeigt werden sollen, GESONDERT, so viel aufzugeben, Django Kapazitäten zu generieren, die eine solche form für Sie. Der Vorteil war, dass ich noch mit Django standard-Komponenten für den form, konnte aber lassen Sie das nicht benötigte Felder raus, aber es war eine sehr hässliche Lösung. Kann Ihnen ein Beispiel geben, wenn Sie wollen, obwohl.
Können Sie zeigen, wie address_id Feld definiert wird, in der PharmInfo Modell?

InformationsquelleAutor Aidan Ewen | 2011-06-13

Schreibe einen Kommentar