gpt4 book ai didi

python - 如何使用父字段限制查询集?

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:09 25 4
gpt4 key购买 nike

我必须通过父模型字段进行 LIMIT。

模型.py

class Blog(Model):
max_posts = IntegerField(verbose_name=u"Limite Posts", help_text=u"Número de posts máximo DESSE BLOG para serem exibidos na home.")

class Post(Model):
title = CharField(max_length=200, verbose_name=u"Título")

我想在我的模板上得到这样的东西:

- 博客 A (max_posts=2)

Item 1

Item 2

- 博客 B (max_posts=3)

Item 1

Item 2

Item 3

所以我根据我的观点尝试了这个

views.py

Post.objects.annotate(blog__max_posts=Count('blog__max_posts')).filter(blog__published=True)

但它并没有像预期的那样工作。我怎样才能做到这一点?

最佳答案

如果添加缺少的外键:

class Blog(Model):
name = CharField(max_length=255)
max_posts = IntegerField(verbose_name=u"Limite Posts", help_text=u"Número de posts máximo DESSE BLOG para serem exibidos na home.")

class Post(Model):
blog = ForeignKey(Blog)
title = CharField(max_length=200, verbose_name=u"Título")

您可以通过每个博客一次 db-hit 来获取帖子:

blogs = Blog.objects.filter(published=True)
posts = {b:b.post_set.all()[:b.max_posts] for b in blogs}

您可能需要在切片之前添加 order_by..

然后,模板可以写为:

{% for blog, blogposts in posts.items %}
<h1>{{ blog.name }} (max_posts={{ blog.max_posts }})</h1>
<ul>
{% for post in blogposts %}
<li>{{ post }}</li> {# probably something more fancy here.. #}
{% endfor %}
</ul>
{% endfor %}

关于python - 如何使用父字段限制查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34478085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com