के विकल्प को संशोधित चलो कहते हैं कि मैं कुछ काल्पनिक मॉडल करते हैं करने के लिए:कैसे ModelMultipleChoiceField
class Author(Model):
name = CharField()
class Book(Model):
title = CharField()
author = ForeignKey(Author)
और मान लें कि मैं पुस्तक के लिए एक ModelForm का उपयोग करना चाहते हैं:
class BookForm(ModelForm):
class Meta:
model = Book
सरल अब तक। लेकिन आइए यह भी कहें कि मेरे डेटाबेस में लेखकों का एक टन है, और मैं इतना लंबा विकल्प नहीं चाहता हूं। इसलिए, मैं चाहता हूं कि BookForm के ModelMultipleChoiceField लेखक फ़ील्ड पर क्वेरीसेट को प्रतिबंधित करना है। आइए यह भी कहें कि मैं चाहता हूं कि क्वेरीसेट __init__
तक नहीं चुना जा सकता है, क्योंकि यह पारित होने के लिए एक तर्क पर निर्भर करता है।
यह लगता है जैसे कि यह चाल हो सकती:,
class BookForm(ModelForm):
class Meta:
model = Book
def __init__(self, letter):
# returns the queryset based on the letter
choices = getChoices(letter)
self.author.queryset = choices
बेशक
कि अगर सिर्फ काम मैं यहाँ नहीं होगा। यह मुझे एक विशेषता त्रुटि प्राप्त करता है। 'बुकफॉर्म' ऑब्जेक्ट में कोई विशेषता 'लेखक' नहीं है।
class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())
class Meta:
model = Book
def __init__(self, letter):
choices = getChoices(letter)
self.author.queryset = choices
कौन सा एक ही परिणाम का उत्पादन: तो, मैं भी कुछ इस तरह है, जहां मैं ModelForm के डिफ़ॉल्ट क्षेत्र ओवरराइड करने के लिए और फिर इसे बाद में सेट की कोशिश की कोशिश की।
कोई भी जानता है कि यह कैसे किया जाना है? के रूप में विशेषताओं, आप "क्षेत्रों" विशेषता है, जो एक शब्दकोश है में देखने की जरूरत है
हाँ, मेरे वास्तविक समस्या क्षेत्र में सुपर क्लास कॉल है, लेकिन मैंने इसे इस उदाहरण के लिए छोड़ दिया। – Brian
पर्याप्त मेला। मैं इसे किसी भी व्यक्ति के लिए छोड़ दूंगा जो संदर्भ के लिए इस प्रश्न में घूमता है, मुझे लगता है। –
निश्चित रूप से। यह देखना महत्वपूर्ण है कि सुपर() .__ init __() फ़ील्ड तक पहुंच से पहले होने की आवश्यकता है। – Brian