如何在Django中自动查询?

问题描述 投票:0回答:1

我可以通过显式给出'Id'来检索数据,但我想自动检索前3个'Id'数据。请看看我下面的代码,帮帮我吧

这是models.py

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    def __str__(self):
        return self.title

这是admin.py

class PostAdmin(admin.ModelAdmin):
    list_display = ('id','title')
admin.site.register(Post, PostAdmin)

这是views.py

def index(request):
    post3 = get_object_or_404(Post, id=3)
    post2 = get_object_or_404(Post, id=2)
    post1 = get_object_or_404(Post, id=1)
    context = {
        "post3": post3,
        "post2": post2,
        "post1": post1,
    }
    return render(request, 'contents/index.html', context)

如你所见,在上面我给出了ID号,它工作得很好,但我希望它能自动检索顶部的ID。

这是我的模板

<h3>{{post3.title}}</h3>
<h3>{{post2.title}}</h3>
<h3>{{post1.title}}</h3>
python django view model web-deployment
1个回答
1
投票

你可以只使用切片的queryset(它会自动添加LIMIT到SQL查询)或采取索引指定的对象。

posts = Post.objects.all()[:3]  # 3 first objects
posts = Post.objects.order_by("-id")[:3]  # 3 last objects
post = Post.objects.last()  # last object
post = Post.objects.order_by("-id")[0]  # also last object, but it's better to use `last` in such case
post = Post.objects.order_by("-id")[1]  # pre-last object

把它传递给上下文。

context = {"posts": posts}

然后你可以在模板中处理这个queryset。

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

0
投票

你应该用 观点 比如 posts = Post.objects.all()[0:3] 然后在 模板 循环使用

{% for post in posts %}
   {{ post.title }}

如果你想创建DetailView,你可以通过模板传递post.id,并将其作为参数添加到视图中,那么 Post = get_object_or_404(id=post_id)

© www.soinside.com 2019 - 2024. All rights reserved.