【发布时间】: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