2009-12-28 12 views
21

क्या यह सही है?Django: limit_choices_to (क्या यह सही है)

class Customer(models.Model): 
    account = models.ForeignKey(Account) 


class Order(models.Model): 
    account = models.ForeignKey(Account) 
    customer = models.ForeignKey(Customer, limit_choices_to={'account': 'self.account'}) 

मुझे यकीन है कि एक आदेश प्रपत्र केवल ग्राहक विकल्पों आदेश के रूप में ही खाते से संबंधित प्रदर्शित करेगा बनाने के लिए कोशिश कर रहा हूँ।

यदि मैं कुछ चमकदार खराब-डिजाइन फॉलसी देख रहा हूं, तो मुझे बताएं।

मुख्य बात मैं के साथ चिंतित हूँ है:

limit_choices_to={'account': 'self.account'} 
+0

आपका प्रश्न समझ में नहीं आया। क्या आप और स्पष्ट हो सकते हैं? – Mayuresh

उत्तर

18

'यह सही है' का एकमात्र उत्तर यह है कि 'जब आप इसे चलाते हैं तो यह काम करता है?' निश्चित रूप से इसका जवाब नहीं है, इसलिए मुझे नहीं पता कि आप यहां क्यों पूछ रहे हैं।

वर्तमान मॉडल में किसी अन्य फ़ील्ड के मान के आधार पर सीमा को सीमित करने के लिए सीमा_choices_to गतिशील रूप से उपयोग करने का कोई तरीका नहीं है। ऐसा करने का सबसे अच्छा तरीका फॉर्म को अनुकूलित करना है। एक मॉडलफॉर्म सबक्लास को परिभाषित करें, और __init__ विधि को ओवरराइड करें:

class MyOrderForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyOrderForm, self).__init__(*args, **kwargs) 
     if 'initial' in kwargs: 
      self.fields['customer'].queryset = Customer.objects.filter(account=initial.account) 
+39

सिर्फ इसलिए कि यह मेरे लिए काम नहीं करता था इसका मतलब यह नहीं था कि यह गलत दृष्टिकोण होना था। मैंने पूछा क्योंकि Django साइट पर इस सुविधा के बारे में स्पष्ट दस्तावेज नहीं है, और मुझे यकीन नहीं था कि मेरा वाक्यविन्यास सही था या नहीं। – orokusaki

+0

यह भी अच्छा है यदि आपको कक्षा MyOrderForm -> http://stackoverflow.com/a/6062628/758202 – zzart

+0

में ओबीजे अनुरोध करने की आवश्यकता है हां, यह दस्तावेज़ों में बहुत स्पष्ट नहीं है। मुझे लगता है कि समस्या यह है कि 'limit_choices_to' विदेशी के फ़ंक्शन का पैरामीटर है, और वह फ़ंक्शन किसी क्लास सदस्य को असाइन किया जाना चाहिए। इस स्तर पर, 'आत्म' का अर्थ कुछ भी नहीं है। इसे काम करने के लिए, 'Django' में फ़िल्टर फ़ंक्शन होना चाहिए जो' __init__' में काम करता है, और, जो मुझे पता है, उसके लिए यह एक नहीं है। –

-1

limit_choices_to={'account': 'self.account'}, गलत है के बाद से ग्राहकों के लिए विदेशी कुंजी Account को इंगित नहीं कर सकते।

+0

ग्राहक के पास "खाता" विशेषता है हालांकि। फिर भी यह मामला है? – orokusaki

0

आपको अपने ऑर्डर फॉर्म के choices फ़ील्ड को सेट करना चाहिए (ModelForm से विरासत में) कन्स्ट्रक्टर में।

संबंधित मुद्दे