2012-06-13 16 views
8

मैं तो की तरह, एक अजगर संपत्ति के साथ एक Django मॉडल स्थापित करने के लिए कोशिश की है:Django मॉडल और अजगर गुण

class Post(models.Model): 
    _summary = models.TextField(blank=True) 
    body = models.TextField() 

    @property 
    def summary(self): 
     if self._summary: 
      return self._summary 
     else: 
      return self.body 

    @summary.setter 
    def summary(self, value): 
     self._summary = value 

    @summary.deleter 
    def summary(self): 
     self._summary = '' 

अब तक तो अच्छा है, और कंसोल में मैं सारांश संपत्ति के साथ बातचीत कर सकते हैं बस ठीक। लेकिन जब मैं इसके साथ Django-y कुछ भी करने की कोशिश करता हूं, जैसे Post(title="foo", summary="bar"), यह एक फिट फेंकता है। क्या पाइथन गुणों के साथ अच्छा खेलने के लिए Django प्राप्त करने का कोई तरीका है?

+0

यह पायथन (http://docs.python.org/library/functions.html#property) में मानक विधि है - मैं बस 'संपत्ति' को स्पष्ट रूप से कॉल करने के बजाय सजावटी शैली का उपयोग कर रहा हूं। – futuraprime

+0

आपका मतलब है 'पोस्ट (बॉडी = "फू", सारांश = "बार")'? (ध्यान दें कि 'शीर्षक' के बजाय 'body')। यह काम करना चाहिए। – okm

+0

@okm मैंने टाइपो को ठीक किया। यह 'पोस्ट (शीर्षक = "foo", सारांश = "बार") कहता था, जो एक स्पष्ट टाइपो था। – Buttons840

उत्तर

12

दुर्भाग्यवश, Django मॉडल पायथन गुणों के साथ बहुत अच्छा नहीं खेलते हैं। जिस तरह से यह काम करता है, ओआरएम केवल क्वेरीसेट फिल्टर में फ़ील्ड इंस्टेंस के नामों को पहचानता है।

आप अपने फ़िल्टर में summary का संदर्भ नहीं पाएंगे, इसके बजाय आपको _summary का उपयोग करना होगा। यह गंदा असली जल्दी हो जाता है, उदाहरण के लिए एक बहु तालिका क्वेरी में इस क्षेत्र का उल्लेख करने के लिए, आप संपत्ति के समर्थन पर और अधिक विस्तार के लिए https://code.djangoproject.com/ticket/3148 देखें तरह

User.objects.filter(post___summary__contains="some string") 

कुछ का उपयोग करना होगा।

+0

क्या आपने कोशिश की है? [कोड] (https://github.com/django/django/commit/90acc8ff7e1b27b5c2f7cd5a2440d94d5fa22445#L0R153) दिखाता है कि 5 साल पहले से 'kwargs' के माध्यम से संपत्ति असाइन करना संभव है ... – okm

+0

ओह, ऐसा लगता है कि आप सही हैं - निर्माता गुणों का समर्थन करता है; यह 'GenericForeignKey' का समर्थन करने के लिए है। हालांकि, QuerySets के बारे में अन्य तर्क है। – koniiiik

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