2012-02-17 17 views
12

मेरे पास निम्नलिखित है, लेकिन यह पुस्तक टिप्पणी के लिए लेबल क्यों नहीं छिपाता है? मैं त्रुटि 'फ़ील्ड' परिभाषित नहीं है:Django: ModelForm के साथ डिफ़ॉल्ट लेबल को छुपाएं/ओवरराइट कैसे करें?

from django.db import models 
from django.forms import ModelForm, Textarea 

class Booklog(models.Model): 
    Author = models.ForeignKey(Author) 
    Book_comment = models.TextField() 
    Bookcomment_date = models.DateTimeField(auto_now=True) 

class BooklogForm(ModelForm): 
    #book_comment = TextField(label='') 

    class Meta: 
     model = Booklog 
     exclude = ('Author') 
     widgets = {'book_entry': Textarea(attrs={'cols': 45, 'rows': 5}, label={''}),} 
+0

शायद छिपा नहीं है, लेकिन कुछ भी नहीं करने के लिए लेबल बदल? – thedeepfield

+0

क्या आपने फॉर्म आयात किए हैं। टेक्स्टफिल्ड? – Alasdair

+0

मैंने नहीं किया, मैं केवल django.forms आयात मॉडलफॉर्म, Textarea से है। जब मैं "टेक्स्टफिल्ड" जोड़ने का प्रयास करता हूं तो मुझे एक आयात त्रुटि मिलती है ... – thedeepfield

उत्तर

16

उपरोक्त मेरी टिप्पणी पर विस्तार करने के लिए, फ़ॉर्म के लिए टेक्स्टफ़िल्ल्ड नहीं है। यही आपकी टेक्स्टफिल्ड त्रुटि आपको बता रही है। जब तक आपके पास वैध फॉर्म फ़ील्ड न हो तब तक लेबल के बारे में चिंता करने की कोई बात नहीं है।

समाधान फॉर्म का उपयोग करना है। इसके बजाय टेक्स्टफिडा विजेट के साथ। आप मॉडल फॉर्म विजेट्स विकल्प का उपयोग कर सकते हैं, लेकिन फ़ील्ड को परिभाषित करते समय विजेट सेट करना आसान है।

एक बार आपके पास वैध फ़ील्ड हो जाने के बाद, आप पहले ही जानते हैं कि रिक्त लेबल कैसे सेट करें: बस अपनी फ़ील्ड परिभाषा में लेबल = '' का उपयोग करें।

# I prefer to importing django.forms 
# but import the fields etc individually 
# if you prefer 
from django import forms 

class BooklogForm(forms.ModelForm): 
    book_comment = forms.CharField(widget=forms.Textarea, label='') 

    class Meta: 
     model = Booklog 
     exclude = ('Author',) 
1

exclude विशेषता एक iterable (आमतौर पर एक सूची या टपल) लेता है। लेकिन ('book') एक टुपल नहीं है; पाइथन के सिंटैक्स के क्विर्क के कारण, आपको इसे एक ट्यूपल बनाने के लिए कॉमा जोड़ने की आवश्यकता है: exclude = ('book',)

इस कारण से, मैं आमतौर पर केवल सूचियों का उपयोग करता हूं: exclude = ['book']। (अर्थात्, यह वैसे भी सूचियों का उपयोग करने के लिए और अधिक समझ में आता है; मुझे यकीन नहीं है कि Django के दस्तावेज इसके बजाय tuples के उपयोग को प्रोत्साहित क्यों करते हैं।)

+0

मेरा मानना ​​है कि Django के दस्तावेज tuples की सिफारिश करता है क्योंकि चूंकि मूल्यों को बाहर नहीं बदलेगा, इसलिए कोई सूची नहीं है (जो म्यूटेबल है)। उस परिवर्तनीय संपत्ति के कारण सूची tuples से बड़ी हैं। ए = ('ए',), बी = ['ए'], फिर __ आकार के __ विधि का उपयोग करें और आकार की जांच करें ;-) – markuz

+0

मैं बस लेबल को रिक्त करना चाहता हूं, मैं दस्तावेज़ों का पालन करने के लिए बिल्कुल सही हूं और ओवरराइड करने में सक्षम हूं डिफ़ॉल्ट लेबल ... – thedeepfield

+0

@markuz: मुझे लगता है कि यह मामला है, लेकिन मुझे अभी भी लगता है कि यह गलत है, क्योंकि टुपल्स केवल अपरिवर्तनीय सूचियां नहीं हैं। – mipadi

0

सबसे पहले, आप Meta कक्षा में फ़ील्ड डालते हैं। इसे वास्तविक ModelForm पर जाना होगा। दूसरा, वैसे भी वांछित परिणाम नहीं होगा। यह HTML में एक खाली लेबल तत्व मुद्रित करेगा।

आप पूरी तरह से लेबल को निकालना चाहते हैं, तो या तो स्वयं क्षेत्र के लिए जाँच करें और लेबल नहीं दिखाते:

{% for field in form %} 
    {% if field.name != 'book_comment' %} 
    {{ field.label }} 
    {% endif %} 
    {{ field }} 
{% endfor %} 

या JavaScript का उपयोग इसे हटाने के लिए।

5

सिर्फ लेबल ओवरराइड करने के लिए आप कर सकते हैं

def __init__(self, *args, **kwargs): 
    super(ModelForm, self).__init__(*args, **kwargs) 
    self.fields['my_field_name'].label = 'My New Title'