簡體   English   中英

如何在Django的formset中向表單添加純文本信息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM