django文檔建議我可以從我的模板中識別隱藏/可見字段。我有兩個模型,AddressInfo和PharmacyInfo。我需要從一個頁面輸入兩個表的數據。我想隱藏address_id字段(來自PharmacyInfo模型)。我目前有:從django模型中隱藏字段
{% 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),
)
此代碼隱藏address_id字段的輸入框,但標籤仍顯示。我想隱藏整個div,但'form.visible_fields'不會將它從輸出中排除。這讓我瘋狂。任何人都可以告訴我如何以模板可見的方式標記address_id字段。
很久以前我有類似的問題。我最終創建了一個forms.Form子類,它指定了應該單獨顯示哪些字段,因此非常遺憾Django無法爲您生成此類表單。好處是我仍然在使用Django的標準組件,但可能會留下不必要的字段,但這是一個相當難看的解決方案。如果你想要的話,可以給你一個例子。 – 2011-06-13 15:31:58
你可以在'PharmInfo'模型中顯示'address_id'字段是如何定義的嗎? – 2011-06-13 15:37:53