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.
Können Sie zeigen, wie
address_id
Feld definiert wird, in der PharmInfo
Modell?
InformationsquelleAutor Aidan Ewen | 2011-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht beabsichtigen, auf die
address_id
Feld bearbeitet werden an alle in der form, die Sie verwenden sollten, dieexclude
meta-Feld dokumentiert, wie in Unter Verwendung einer Teilmenge der Felder in der form.Sollte das Ergebnis so Aussehen:
Beachten Sie, dass dies verhindert, dass die
address_id
Feld wird festgelegt durch die form (überprüfen Sie den Hinweis unter dem Beispiel in der Dokumentation).InformationsquelleAutor André Caron
OK, sieht aus wie ich beim Schnitt den falschen code in mein template. Ich würde Hinzugefügt
zu einem Teil der Vorlage, die ich auskommentiert (ich finde auskommentierte Zeilen schwer zu sehen, die auf Vorlagen). Alles wie erwartet funktioniert mit dem folgenden code in mein template:
Entschuldigung an jeden, die Zeit auf diesem (ich würde gebucht haben früh, aber als neu zu Stackoverflow ich durfte nicht Antwort auf meine eigene Frage innerhalb von 8 Stunden nach der Buchung).
InformationsquelleAutor Aidan Ewen