2011-06-10 27 views
9

में Django रिवर्स क्वेरी मैं इसखाका

class Blog(models.Model): 
    name = models.CharField(max_length=100) 
    tagline = models.TextField() 

    def __unicode__(self): 
     return self.name 

class Entry(models.Model): 
    blog = models.ForeignKey(Blog) 
    headline = models.CharField(max_length=255) 

मैं एक पेज में सभी ब्लॉगों की सूची बनाना चाहते जैसे मॉडल की है। मैं इस तरह के दृश्य में

{% extends "base.html" %} 
{% block title %}{% endblock %} 
{% block extrahead %} 

{% endblock %} 

{% block content %} 
    {% for blog in blog_list %} 
      {{ blog.tagline }} 
    {% endfor %} 
{% endblock %} 

लेकिन मैं दिखाना चाहते हैं, इस तरह के बात blog__entry__name लेकिन मैं पता नहीं कैसे कर सकते हैं कि एक दृश्य ऐसा है कि

def listAllBlogs(request): 
    blogs= Blog.objects.all() 
    return object_list(
     request, 
     blogs, 
     template_object_name = "blog", 
     allow_empty = True, 
     ) 

और मैं ब्लॉग के टैगलाइन प्रदर्शित कर सकते हैं लिखा है मैं इसे टेम्पलेट में प्राप्त करता हूं। इसके अलावा, ब्लॉग में कोई प्रविष्टि नहीं हो सकती है। मैं टेम्पलेट में कैसे पता लगा सकता हूं?

धन्यवाद

+2

नीचे दोनों उत्तर सही हैं, केवल दो टिप्पणियां। 'ब्लॉग' फ़ील्ड के लिए 'related_name =' प्रविष्टियां 'को परिभाषित करें, और आप' blog.entries' लिखने में सक्षम होंगे। और 'select_related()' का उपयोग करें, एन + 1 एसक्यूएल प्रश्नों को न करने के लिए। – DrTyrsa

उत्तर

18

ब्लॉग प्रविष्टियों (Related Manager) पहुंचने के लिए: blog.entry_set.all

अन्य कार्यों ऐसा करने के लिए करता है, तो ब्लॉग कोई प्रविष्टि नहीं है, तो आप {% empty %} टैग जब सेट रिक्त है कि मार डाला है।

{% block content %} 
    {% for blog in blog_list %} 
      {{ blog.tagline }} 
      {% for entry in blog.entry_set.all %} 
       {{entry.name}} 
      {% empty %} 
      <!-- no entries --> 
      {% endfor %} 
    {% endfor %} 
{% endblock %} 
+0

@brsbilgic [related_name] (https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name) – DrTyrsa

+0

'OneToOneField' के लिए आप बस उपयोग कर सकते हैं: ' blog.entry' ('blog.entry_set' के बजाय)। https://docs.djangoproject.com/en/dev/topics/db/queries/#one-to-one-relationships – manji

+0

यह बहुत अच्छा काम करता है। धन्यवाद! लेकिन क्या होगा यदि रिश्ते एक-से-एक ब्लॉग = मॉडल थे। ओनटोनफिल्ड (ब्लॉग, अद्वितीय = सही)। '{{Blog.entry__headline}}' – brsbilgic

7

आपके कोड के आधार पर आप निम्नलिखित कर सकते हैं।

{% block content %} 
    {% for blog in blog_list %} 
      {{ blog.tagline }} 
      {% for entry in blog.entry_set.all %} 
       {{entry.name}} 
      {% endfor %} 
    {% endfor %} 
{% endblock %} 
+0

ब्लॉग_entry_set की बजाय blog.entry_set नहीं होना चाहिए? – bcoughlan

+0

@waitinforatrain ओह, हाँ धन्यवाद यह होना चाहिए था! – JamesO

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