2012-07-03 11 views
5

में रीडोनली फ़ील्ड मैं मॉडल फ़ील्ड से फॉर्मेट जेनरेट करने के लिए मॉडलफॉर्मसेट फैक्ट्री का उपयोग कर रहा हूं। यहां मैं केवल क्वेरीसेट ऑब्जेक्ट्स को केवल पढ़ने और अन्य (अतिरिक्त रूपों) के रूप में पढ़ना चाहता हूं, जो गैर-पढ़ने वाले फ़ील्डdjango formet

मैं इसे कैसे प्राप्त कर सकता हूं?

AuthotFormSet = modelformset_factory(Author, extra=2,) 
    formset = AuthorFormSet(queryset=Author.objects.all()) 

ऊपर formset में मैं सभी क्वेरीसमूह वस्तुओं के रूप में केवल पढ़ने के लिए प्रदर्शित करने के लिए करना चाहता था, और गैर केवल पढ़ने के लिए फ़ील्ड के रूप में अतिरिक्त रूपों शेष। मैं इसे कैसे प्राप्त कर सकता हूं?

अगर मैं इस्तेमाल किया,

 for form in formset.forms: 
      form.fields['weight'].widget.attrs['readonly'] = True 

यह क्षेत्रों केवल पढ़ने के लिए जो मैं चाहता हूँ न (अतिरिक्त सहित) सभी रूपों में परिवर्तित कर देंगे। और मैं फॉर्मेट

उत्तर

7

मैं एक रूप को निर्दिष्ट मॉडल के लिए उपयोग करने के लिए सलाह देते हैं, और उस रूप में आप सेट कर सकते हैं जो कुछ भी जिम्मेदार बताते हैं आप करना चाहते हैं सिफ़ पढ़िये।

#forms.py 
class AuthorForm(forms.ModelForm): 
    class Meta: 
     model = Author 

    def __init__(self, *args, **kwargs): 
     super(AuthorForm, self).__init__(*args, **kwargs) 
     if self.instance.id: 
      self.fields['weight'].widget.attrs['readonly'] = True 

#views.py 
AuthorFormSet = modelformset_factory(Author, extra=2, form=AuthorForm) 
+0

मेरा सवाल यह है कि मैं केवल अतिरिक्त रूपों को पढ़ने के लिए केवल क्वेरीसेट फॉर्म बना सकता हूं। आपका समाधान सभी फॉर्म फ़ील्ड्स को अतिरिक्त फ़ील्ड सहित रीडोनली रूप में रूपांतरित कर देगा। यहां मैं गैर फॉर्मोनली के रूप में अतिरिक्त फॉर्म फ़ील्ड कैसे बना सकता हूं और अन्य को पढ़ा जाना चाहिए – Asif

+0

मेरे संपादित उत्तर में अगर कथन देखें। मुझे यकीन नहीं है कि यह जांचने का सबसे साफ तरीका है कि फ़ॉर्म के साथ एक उदाहरण है या नहीं, लेकिन यह मेरे परीक्षण में काम कर रहा है। –

+0

आपकी समस्या हल करने के लिए बहुत बहुत धन्यवाद – Asif

1

पर गतिशील रूप से फ़ॉर्म जोड़ने के लिए jquery प्लगइन का उपयोग कर रहा हूं, मैंने लंबे समय तक पायथन का उपयोग किया था। आशा है कि this helps। लेकिन आप jQuery

$('.class').attr('readonly', true); 

या

का उपयोग करके प्रदर्शन क्षेत्रों को नियंत्रित करना चाहते हैं तो
$('#id').attr('readonly', true);