2012-07-01 9 views
5

मैं "पता" नामक Django मॉडल पर एक संपत्ति बना रहा हूं। मैं अपने मॉडल पर मौजूद कई क्षेत्रों के सम्मेलन को शामिल करना चाहता हूं। समस्या यह है कि इस मॉडल के सभी उदाहरणों में इन सभी क्षेत्रों के लिए मूल्य नहीं होंगे। इसलिए, मैं केवल उन्हीं फ़ील्ड को जोड़ना चाहता हूं जिनके पास मूल्य हैं।पायथन/Django एक स्ट्रिंग को इस बात पर निर्भर करता है कि क्या स्ट्रिंग मौजूद है

ऐसा करने के लिए सबसे अच्छा/सबसे पाइथोनिक तरीका क्या है?

house = models.IntegerField('House Number', null=True, blank=True) 
suf = models.CharField('House Number Suffix', max_length=1, null=True, blank=True) 
unit = models.CharField('Address Unit', max_length=7, null=True, blank=True) 
stex = models.IntegerField('Address Extention', null=True, blank=True) 
stdir = models.CharField('Street Direction', max_length=254, null=True, blank=True) 
stnam = models.CharField('Street Name', max_length=30, null=True, blank=True) 
stdes = models.CharField('Street Designation', max_length=3, null=True, blank=True) 
stdessuf = models.CharField('Street Designation Suffix',max_length=1, null=True, blank=True) 

मैं बस कुछ इस तरह कर सकता है::

def _get_address(self): 
    return "%s %s %s %s %s %s %s %s" % (self.house, self.suf, self.unit, self.stex, self.stdir, self.stname, self.stdes, self.stdessuf) 

लेकिन फिर वहाँ होगा परिणाम में अतिरिक्त रिक्त रिक्त स्थान

यहाँ मॉडल से प्रासंगिक क्षेत्र हैं।

मैं प्रत्येक के भीतर बयानों और concatenate की एक श्रृंखला कर सकता है, लेकिन यह बदसूरत लगता है।

इस स्थिति को संभालने का सबसे अच्छा तरीका क्या है?

धन्यवाद।

उत्तर

4
parts = (1, 'a', 'b', 2, 'c', 'd', None, 'f') 
# parts = (self.house, self.suf, self.unit, 
#   self.stex, self.stdir, self.stname, 
#   self.stdes, self.stdessuf) 
' '.join(str(part) for part in parts if part is not None) 
# '1 a b 2 c d e f' 

तुम सिर्फ एक सूची कंप्यूटर अनुप्रयोग करते हैं, और यदि कोई मूल्य नहीं नहीं है की जाँच करें, और उन्हें एक स्ट्रिंग के लिए कनवर्ट तो वे ठीक से प्रकार की परवाह किए बिना में शामिल हो।

+0

'कोई नहीं' के लिए धन्यवाद –

+0

@DouglasMeehan: ज़रूर। इसके अलावा यदि आप विधि को कॉल करते समय हर बार एक temp सूची बनाने पर सहेजना चाहते हैं, तो आप फ़ील्ड को श्रेणी विशेषता के रूप में सूची में सहेज सकते हैं, क्योंकि यह उदाहरणों के बीच नहीं बदला जा रहा है। – jdi

+0

इस स्थिति में क्या बेहतर है? टुपल या सूची? –

2

मैं केवल जनरेटर का उपयोग गैर-फाल्सी मान प्राप्त करने के लिए करता हूं, और फिर उनसे जुड़ता हूं। उदाहरण के लिए:

parts = (self.house, self.suf, self.unit, self.stex, self.stdir, self.stname, self.stdes, self.stdessuf) 
return " ".join(str(s) for s in parts if s is not None) 
+0

आपको किसी के लिए जांच करने की आवश्यकता नहीं है, न कि फाल्सी मूल्य। कोई भी 0 जैसा नहीं है जो वैध संख्या – jdi

+0

है, इसलिए उस स्थिति में, मैं भागों = (self.house, self.suf, self.unit, self.stex, self.stdir, self.stname, self .stdes, self.stdessuf) वापस "" जॉइन (एस) भागों में एस के लिए अगर कोई नहीं है)? –

+0

@jdi इसे इंगित करने के लिए धन्यवाद! – cberner

1
" ".join(filter(None, 
       [self.house, self.suf, self.unit, 
       self.stex, self.stdir, self.stname, 
       self.stdes, self.stdessuf])) 
+0

यह तोड़ता है यदि फ़ील्ड स्ट्रिंग नहीं है। – jdi

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