【问题标题】:How to filter objects in a class based view django如何在基于类的视图 django 中过滤对象
【发布时间】:2021-02-20 13:31:41
【问题描述】:

我有一个类似这样的博客文章详细信息的课程:

class MaghaleDetail(DetailView):
    model = MaghaalaatPost
    template_name = 'Blog/Blog-elmi-detail.html'
    context_object_name = 'maghaale'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["related_items"] = self.object.tags.similar_objects()[:3]
        context["images"] = MaghaalaatImages.objects.all()
        return context

这是我的模型:

class MaghaalaatPost(models.Model):
    title = models.CharField(max_length=250)
    paragraph = models.TextField(blank=True)
class MaghaalaatImages(models.Model):
    post = models.ForeignKey(MaghaalaatPost, default=None, 
        on_delete=models.CASCADE)
    images = models.FileField(upload_to='post_images', blank=True)

图像上下文显示每一个图像,因为我将它设置为 all()。如何过滤它以仅显示此特定帖子的图像?

【问题讨论】:

  • 请分享您的MaghaalaatImages 模型(相关部分),尤其是与MaghalaatPost 的关系。
  • 这里,我已经更新了模型。

标签: django django-views


【解决方案1】:

您实际上不需要将其传递给上下文。如果你定义了一个关系(比如ForeignKeyOneToOneFieldManyToManyField等),那么Django会在目标模型中添加一个管理器来访问相关的对象,这样你就可以在模板中访问相关的对象与:

{% for image in maghaale.maghaalaatimages_set.all %}
    … do something with image …
{% endfor %}

对于反向关系的名称,您可以指定related_name=… parameter [Django-doc]。如果不指定,Django 将使用<i>modelname</i>_setmodelname小写模型的类名。

或在上下文中:

class MaghaleDetail(DetailView):
    model = MaghaalaatPost
    template_name = 'Blog/Blog-elmi-detail.html'
    context_object_name = 'maghaale'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['related_items'] = self.object.tags.similar_objects()[:3]
        context['images'] = self.object.maghaalaatimages_set.all()
        return context

【讨论】:

  • 是的,但如果我想在 get_context_data 中添加过滤器,我该怎么做?
  • @Sam:同样的方式。
猜你喜欢
  • 2014-01-08
  • 2015-11-04
  • 2020-11-01
  • 2018-11-19
  • 2017-02-18
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
相关资源
最近更新 更多