2012-04-14 18 views
8

इसलिए मैंने Django को पूर्व-मौजूदा डेटाबेस से सफलतापूर्वक (निरीक्षण, सत्यापन और सिंक) से जोड़ा है और मैंने एक ऐप और एक प्रोजेक्ट बनाया है और यह सब (मैं Django पुस्तक और मैं पढ़ रहा हूं मैं अध्याय 5 पर हूं), लेकिन जब मैं वास्तव में इसे चलाता हूं और सामान प्रिंट करता हूं, तो मुझे एक (माना गया) त्रुटि मिलती है। जबकि अजगर में, मैं ठीक से आयात मैं क्या जरूरत है (from myapp.models import Artist) लेकिन अगर मैं मुद्रित करने के लिए प्रयास करते हैं, उदाहरण के लिए, तालिका में पहले पांच पंक्तियों (print Artist.objects.all()[:5]), मैं इस मिल:Django में प्रिंटिंग ऑब्जेक्ट्स

[<Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>] 

क्यों यह नहीं वास्तव में प्लेसहोल्डर होने के बजाय मूल्यों को मुद्रित करें? क्या मैं यहाँ कुछ याद कर रहा हूँ?

उत्तर

11

Django एक ओआरएम (ऑब्जेक्ट-रिलेशनल मैपर) का उपयोग करता है जो पाइथन ऑब्जेक्ट्स और डेटाबेस पंक्तियों के बीच डेटा को आगे और आगे अनुवाद करता है। तो जब आप डेटाबेस से किसी आइटम को प्राप्त करने के लिए इसका उपयोग करते हैं, तो यह इसे पायथन ऑब्जेक्ट में परिवर्तित करता है।

यदि वह ऑब्जेक्ट परिभाषित नहीं करता है कि खुद को टेक्स्ट के रूप में कैसे प्रदर्शित किया जाए, तो Django आपके लिए यह करता है।

>>> class MyObject(object): 
...  pass 
... 
>>> [MyObject(), MyObject()] 
[<__main__.MyObject object at 0x0480E650>, 
<__main__.MyObject object at 0x0480E350>] 

आप प्रत्येक वस्तु के लिए पंक्ति के लिए वास्तविक मान को देखने के लिए चाहते हैं, values का उपयोग करें: अजगर एक ही बात करता है।

# This list contains a Blog object. 
>>> Blog.objects.filter(name__startswith='Beatles') 
[<Blog: Beatles Blog>] 

# This list contains a dictionary. 
>>> Blog.objects.filter(name__startswith='Beatles').values() 
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}] 
+0

इस जवाब को देखने के बाद में यूनिकोड विधि ovveride प्रिंट विधि उपयोग करना चाहते हैं, मैं अगर यह था सोचा मेरे जवाब के विरोध में उनके प्रश्न की दिशा। – jdi

+0

@jdi आपके उत्तर ने मुझे एक स्पष्टीकरण जोड़ने के लिए प्रेरित किया कि वह जो देख रहा है उसे देख रहा है, साथ ही साथ वास्तविक पंक्ति डेटा कैसे प्राप्त करें :) – agf

+0

ठीक है अब आपके पास पूरा बिल्ली का बच्चा-कबूतर है! – jdi

5

अद्यतन:

यहाँ डॉक्स से उदाहरण है में अजगर 3.x, __unicode__

के बजाय __str__ का उपयोग आप जो देख रहे हैं कलाकार की एक सूची है मॉडल उदाहरण आपके मान एक अजगर वस्तु में हैं। आप उन उदाहरणों के प्रतिनिधित्व और अधिक उपयोगी बनाने के लिए चाहते हैं, तो आप उन्हें कुछ उपयोगी मुद्रित करने के लिए के लिए __unicode__ विधि परिभाषित करना चाहिए:

https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#unicode

इसकी नहीं एक प्लेसहोल्डर, इसकी वास्तविक वस्तु के प्रतिनिधित्व, यूनिकोड में बदला ।

+0

आह, हम वहां जाते हैं। मैंने अभी कलाकार के लिए यूनिकोड परिभाषित किया है और इसे फिर से कोशिश की है, और यह काम करता है; धन्यवाद! : डी –

+0

@GabeC .: ओह मीठा, मैं वास्तव में सही रास्ते पर था। मैं सोच रहा था कि एएफएफ शायद आप जो चाहते थे उसे संबोधित कर रहे हों। – jdi

0

आप मॉडल ही

def __unicode__(self): 
    return u'%s' % (self.id) 

यहाँ एक उदाहरण मॉडल

class unit(models.Model): 
id = models.AutoField(primary_key=True) 
name = models.CharField(max_length=255) 
def __unicode__(self): 
    return u'%s' % (self.name) 

print(unit.objects.all()) 
[unit: KG, unit: PCs] 
+0

क्या आप कृपया मुझे यह समझने में मदद कर सकते हैं कि मैं उदाहरण के लिए 'यूनिट: केजी, यूनिट: पीसी]' से मॉडल नाम 'यूनिट' को कैसे हटा सकता हूं, लूप में मैं नीचे प्रिंट करना चाहता हूं: 'केजी से ए' 'पीसी से बी 'यहां' ए, बी 'एक और मॉडल से होगा और' केजी, पीसी 'मॉडल' यूनिट 'से हैं। –

+0

यह एक अलग सवाल है जो एक टिप्पणी नहीं है और हमें आपके अधिक कोड को देखने की आवश्यकता है। –

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