![](/img/trans.png)
[英]How to add forms to formset Dinamically on browsable django Rest API?
[英]How do I add plain text info to forms in a formset in Django?
我想在每個表單中顯示db查詢的標題和描述,但我不希望它在charfield中,我希望它是html格式的文本。
示例模板代碼:
{% for form, data in zipped_data %}
<div class="row">
<div class="first_col">
<span class="title">{{ data.0 }}</span>
<div class="desc">
{{ data.1|default:"None" }}
</div>
</div>
{% for field in form %}
<div class="fieldWrapper" style="float: left; ">
{{ field.errors }}
{{ field }}
</div>
{% endfor %}
{% endfor %}
這是最慣用的方式嗎? 或者,有沒有辦法添加不會在textarea或文本輸入中顯示的文本到我的模型:
class ReportForm(forms.Form):
comment = forms.CharField()
?
您可以覆蓋表單上的構造函數,並將標題/描述保存為實例級成員變量,而不是使用其他數據壓縮表單。 這有點面向對象,學習如何做到這一點將有助於您解決其他問題,如動態選擇字段。
class MyForm (forms.Form):
def __init__ (self, title, desc, *args, **kwargs):
self.title = title
self.desc = desc
super (MyForm, self).__init__ (*args, **kwargs) # call base class
然后在您的視圖代碼中:
form = MyForm ('Title A', 'Description A')
如果您需要來自數據庫的這些值,請相應地進行調整。 然后在您的模板中,您可以像訪問其他任何內容一樣訪問實例變量,例如:
<h1>{{ form.title }}</h1>
<p>{{ form.desc }}</p>
從您提出問題的方式來看,我認為您可能會對Django使用Python 類屬性提供聲明性表單API與應用於類的各個實例的實例級屬性的方式有一些混淆,在這種情況下,您的表單對象。
我只是通過將文本輸入字段子類化為一個來創建一個只讀小部件:
class ReadOnlyText(forms.TextInput):
input_type = 'text'
def render(self, name, value, attrs=None):
if value is None:
value = ''
return value
和:
class ReportForm(forms.Form):
comment = forms.CharField(widget=ReadOnlyText, label='comment')
我不得不解決類似的問題,就像你的想法安德烈。 我有一些使用它的問題,因為,如果有驗證錯誤,只讀字段的值將丟失。 為了解決這個問題,我做了類似的事情但改寫了HiddenInput,並將值保存在隱藏的表單字段中。 即:
class ReadOnlyText(forms.HiddenInput):
input_type = 'hidden'
def render(self, name, value, attrs=None):
if value is None:
value = ''
return mark_safe(value + super(ReadOnlyTextWidget, self).render(name, value, attrs))
class ReportForm(forms.Form):
comment = forms.CharField(widget=ReadOnlyText, label='comment')
我想你可以用“{{field.value}}”來獲得它。 也許這是更容易的方式。
{% for form in formset %}
{% for field in form %}
{% if forloop.counter = 1 %}
<td><img src="{{ MEDIA_URL }}{{ field.value }}"/></td>
{% endif %}
{% if forloop.counter = 2 %}
<td>{{ field.value }}</td>
{% endif %}
{% if forloop.counter > 2 %}
<td>{{ field }}{{ field.errors }}</td>
{% endif %}
{% endfor %}
{% endfor %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.