【问题标题】:django use slug not pkdjango 使用 slug 不是 pk
【发布时间】:2020-06-17 00:50:15
【问题描述】:

我正在尝试在我的 url 中使用 slug,我在其他网站上做得很好,但是由于某种原因,我无法在网站的这个区域的 url 中使用 slug,只有主键可以获得期望的结果,我在这里缺少什么?与我所做的其他网站的唯一区别是,slug 将用于过滤,我认为这就是搞砸了。

型号:

class Desk(models.Model):
    name = models.CharField(max_length=16, unique=True)
    slug = models.SlugField(max_length=16, unique=True)

    def __str__(self):
        return self.slug


class Handover(models.Model):
    desk = models.ForeignKey(
        Desk,
        related_name="handover",
        on_delete=models.CASCADE
    )
    published = models.DateTimeField(auto_now_add=True)
    user = models.CharField(max_length=45)
    ongoing = models.CharField(max_length=1024, null=True, blank=True)
    resolved = models.CharField(max_length=1024, null=True, blank=True)
    planned_work = models.CharField(max_length=1024, null=True, blank=True)
    heightened_awareness = models.CharField(max_length=1024, null=True, blank=True)

在下面的视图中,由于某种原因,我不能在过滤器中使用“slug”这个词,它只会引发错误。如果我在浏览器的 url 中使用 PK,则当前设置有效,但不是我想要使用的 slug,(我不确定为什么这也有效,我希望这不会因为使用 ' slug'在网址中)。

这里是视图:

class IndexView(ListView):
    template_name = 'pcc_homepage/index.html'
    queryset = Handover.objects.order_by('-published')

    def get_queryset(self):
        return Handover.objects.filter(desk=self.kwargs['desk'])

这里是网址:

urlpatterns = [
    path('home/<slug:slug>/', IndexView.as_view(), name='index'),
    path('handover/', HandoverCreateView.as_view(), name='handover'),
]

我怎样才能使用人类可读的单词而不是整数来完成这项工作。

【问题讨论】:

  • 你试过 Handover.objects.filter(desk__slug=self.kwargs['desk']) 吗?
  • 我当然没有。您是否介意将此作为答案,以便我将其标记为正确。

标签: django django-models filtering


【解决方案1】:

你可以试试 Handover.objects.filter(desk__slug=self.kwargs['desk'])

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2013-05-03
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多