我可以通过显式给出'Id'来检索数据,但我想自动检索前3个'Id'数据。请看看我下面的代码,帮帮我吧
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
def __str__(self):
return self.title
class PostAdmin(admin.ModelAdmin):
list_display = ('id','title')
admin.site.register(Post, PostAdmin)
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>
你可以只使用切片的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 %}
你应该用 观点 比如 posts = Post.objects.all()[0:3]
然后在 模板 循环使用
{% for post in posts %}
{{ post.title }}
如果你想创建DetailView,你可以通过模板传递post.id,并将其作为参数添加到视图中,那么 Post = get_object_or_404(id=post_id)