मेरे पास PostForum नामक एक मॉडल है

class PostForum(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    likes = models.ManyToManyField(User, related_name='forum_likes', blank=True)

मेरी कक्षा आधारित दृश्य में मेरे पास निम्नलिखित कोड है:

class CategoryDetailView(DetailView):
    model = Category
    template_name = 'forum/forum_detail.html'

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    category = get_object_or_404(Category, id=self.object.id)
    posts = PostForum.objects.filter(category=category)
    context['posts'] = posts,
    return context

टेम्प्लेट में मैं पोस्ट शीर्षक या सामग्री तक नहीं पहुंच सकता। मैं कुछ नहीं दिखाता

{% for post in posts %}
   {{post.title}}
   <p>{{post.content}}</p>
{% endfor %}

जब मैं {{post}} को पूरे क्वेरीसेट को देखने के लिए प्रस्तुत करता हूं तो यह दिखाता है

<QuerySet [<PostForum: My first post>]>

पोस्ट के शीर्षक या सामग्री तक कैसे पहुंचे

1
tepeholm 8 सितंबर 2019, 08:32

1 उत्तर

सबसे बढ़िया उत्तर

आपको अपने get_context_data फ़ंक्शन में एक छोटी सी त्रुटि है जिसके कारण यह समस्या हो रही है। पिछली , को context['posts'] = posts, लाइन से हटा दें, ताकि get_context_data को पढ़ना चाहिए:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    category = get_object_or_404(Category, id=self.object.id)
    posts = PostForum.objects.filter(category=category)
    context['posts'] = posts  # remove the trailing comma from this line
    return context

अपने टेम्पलेट को बदलने की कोई आवश्यकता नहीं है।

संदर्भ के लिए, अनुगामी अल्पविराम context['posts'] को एक एकल तत्व टपल में बदल रहा है, जिसका एकमात्र तत्व posts क्वेरीसेट, यानी context['posts'] = (posts,) है। तो जब आप अपने टेम्पलेट में {% for post in posts %} करते हैं तो आप क्वेरीसेट में प्रत्येक PostForm पर नहीं बल्कि ट्यूपल में प्रत्येक तत्व पर पुनरावृति कर रहे हैं। चूंकि टपल में केवल एक तत्व होता है, इसलिए आपको post लूप वेरिएबल से जुड़ी संपूर्ण posts क्वेरीसेट प्रत्येक PostForum इंस्टेंस post के बजाय एक बार मिल रही है।

2
azundo 8 सितंबर 2019, 05:47