2009-02-20 7 views
5

मैं प्रत्येक रूप में एक डीबी क्वेरी से एक शीर्षक और विवरण दिखाना चाहता हूं, लेकिन मैं नहीं चाहता कि यह एक charfield में हो, मैं चाहता हूं कि यह HTML- स्वरूपित टेक्स्ट हो।मैं Django में एक फॉर्मेट में रूपों में सादा पाठ जानकारी कैसे जोड़ूं?

नमूना टेम्पलेट कोड:

{% 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 %} 

इस ऐसा करने का सबसे मुहावरेदार रास्ता नहीं है?

class ReportForm(forms.Form): 
    comment = forms.CharField() 

: या, वहाँ पाठ है कि मेरे मॉडल के लिए एक पाठ क्षेत्र या पाठ इनपुट के अंदर प्रदर्शित नहीं किया जाएगा जोड़ने के लिए एक तरीका है?

+0

मैं फ़ॉर्मेट में प्रत्येक रूप में एक शीर्षक और विवरण जोड़ने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि फ़ॉर्म फ़ील्ड जोड़कर अन्य कैसे करें। मैं अधिक फॉर्म फ़ील्ड जोड़ना नहीं चाहता क्योंकि मैं टेक्स्ट फ़ील्ड में शीर्षक या शीर्षक नहीं दिखाना चाहता हूं, मैं चाहता हूं कि यह सादा या एचटीएमएल-स्वरूपित टेक्स्ट – Josh

+0

मैं टेम्पलेट्स को समझूं, मैं Django के बारे में बात कर रहा हूं फॉर्म और फॉर्मेटेट ऑब्जेक्ट्स: http: //docs.djangoproject।कॉम/एन/देव/विषय/रूप/फॉर्मेट/ – Josh

+0

यदि आप टिप्पणी जोड़ने के बजाय प्रश्न अपडेट करते हैं तो यह मदद करता है। नए तथ्यों को जोड़ने के लिए कृपया अपना प्रश्न संपादित करें। –

उत्तर

10

अतिरिक्त डेटा के साथ अपने फॉर्म को ज़िप करने के बजाय, आप अपने फॉर्म पर कन्स्ट्रक्टर को ओवरराइड कर सकते हैं और अपना शीर्षक/विवरण इंस्टेंस-लेवल सदस्य चर के रूप में रख सकते हैं। यह थोड़ा अधिक ऑब्जेक्ट उन्मुख है और यह सीखने के तरीके से आपको गतिशील पसंद क्षेत्रों जैसे सड़क के नीचे अन्य समस्याओं को हल करने में मदद मिलेगी।

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> 

जिस तरह से आप अपने प्रश्न phrased से, मुझे लगता है कि आप शायद रास्ता चारों ओर कुछ भ्रम की स्थिति है Django पायथन वर्ग विशेषताओं का उपयोग करता एक घोषणात्मक फॉर्म एपीआई बनाम इंस्टेंस-लेवल विशेषताएँ जो आप कक्षा के अलग-अलग उदाहरणों पर लागू करते हैं, इस मामले में आपके फॉर्म ऑब्जेक्ट्स प्रदान करते हैं।

+0

धन्यवाद, यह वही था जो मुझे चाहिए था। – Josh

+0

कोई जांच नहीं। स्वीकार्य समाधान के लिए चेक मार्क का उपयोग करना सुनिश्चित करें ताकि अन्य आसानी से समाधान ढूंढ सकें और कुछ प्रतिनिधि बिंदुओं को सौंप सकें। –

+0

बहुत बढ़िया, यह चेक किया गया है। – Josh

4

मैं सिर्फ पाठ इनपुट क्षेत्र एक उपवर्गीकरण द्वारा रीड-ओनली बनाया विजेट:

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') 
2

मुझे एक समान समस्या को हल करना था और आपके विचार आंद्रेई की तरह था। हालांकि, इसका उपयोग करने में कुछ समस्याएं थीं, हालांकि, अगर सत्यापन त्रुटियां थीं, तो केवल पढ़ने वाले फ़ील्ड का मूल्य खो जाएगा। इसे हल करने के लिए, मैंने कुछ ऐसा ही किया लेकिन इसके बजाय छुपे हुए इनपुट को ओवरराइड किया और मूल्य को एक छिपे हुए फॉर्म फ़ील्ड में रखा। यानी:

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') 
0

मुझे लगता है कि आप इसे "{{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 %} 
संबंधित मुद्दे