📜  详细视图使用 slug 或其他任何东西 pk (1)

📅  最后修改于: 2023-12-03 15:28:09.723000             🧑  作者: Mango

详细视图使用 slug 或其他任何东西 pk

在 Django 中,我们可以添加新的视图来查询已存在的实例,并根据给定的标识符来渲染特定的数据。我们可以使用 pk(主键)或 slug(友好 URL)等标识符来查询数据。本文将介绍如何使用这些标识符来创建详细视图。

1. 使用 pk 查询数据

主键是每个 Django 模型的默认属性。使用主键可以在数据库中快速找到记录。对于大多数模型,主键将是自动增加的整数(ID)。我们可以使用以下方法在视图中查询具有指定 ID 的模型实例:

from django.shortcuts import get_object_or_404
from django.views.generic import DetailView
from myapp.models import MyModel

class MyDetailView(DetailView):
    model = MyModel
    queryset = MyModel.objects.all()
    template_name = 'mytemplate.html'

    def get_object(self, queryset=None):
        return get_object_or_404(MyModel, pk=self.kwargs.get('pk'))

在上面的代码中,我们使用 DetailView 类为模型创建了一个详细视图,并在 get_object 方法中使用 get_object_or_404() 函数来获取指定 ID 的模型实例。我们可以将 pk 替换成我们想要获取的主键值。

2. 使用 slug 查询数据

我们可以通过使用 slug 来代替主键来查询数据。slug 是在网站 URL 中用于描述某个实体的文本字符串。与主键不同,slug 常常在用户友好的 URL 上使用。我们可以将 pk 替换为 slug,然后在视图中使用 get_object_or_404() 函数查询特定的 slug。

在下面的示例中,我们将创建一个名为 slug 的新字段,将其添加到 MyModel 模型中,并使用它来查询数据。

from django.shortcuts import get_object_or_404
from django.views.generic import DetailView
from myapp.models import MyModel

class MyDetailView(DetailView):
    model = MyModel
    queryset = MyModel.objects.all()
    template_name = 'mytemplate.html'

    def get_object(self, queryset=None):
        return get_object_or_404(MyModel, slug=self.kwargs.get('slug'))

在上面的代码中,我们使用 DetailView 类为模型创建了一个详细视图,并在 get_object 方法中使用 get_object_or_404() 函数来获取指定 slug 值对应的模型实例。

3. 结论

在本文中,我们介绍了如何使用 pkslug 标识符来创建详细视图。我们使用 Django 中的 DetailView 类来创建视图,并使用 get_object_or_404() 函数查询特定的模型实例。

使用这些方法可以帮助我们更轻松地查询和显示特定的实例数据,并在网站上实现友好的 URL。