代码之家  ›  专栏  ›  技术社区  ›  nicorellius

在URL中使用ID或Slug以外的类字段

  •  1
  • nicorellius  · 技术社区  · 6 年前

    我想通过一个字段来访问一个对象,而不是Django的ID或Slug DetailView ,如下所示:

    http://example.com/product/name

    我的

    class Product (models.Model):
    
        name = models.CharField(max_length=50, help_text="Full name")
    

    视图:

    class ProductDetail(DetailView):
    
        model = Product
    

    URLConf公司:

    urlpatterns = [
        path('product/<name>', ProductDetail.as_view(), name='product-detail'),
    ]
    

    请注意,我的模板正在工作,我可以像往常一样按ID访问对象:

    http://example.com/product/1

    1 回复  |  直到 6 年前
        1
  •  1
  •   willeM_ Van Onsem    6 年前

    get_object(…) method [Django-doc] :

    from django.shortcuts import get_object_or_404
    
    class ProductDetail(DetailView):
        model = Product
    
        def get_object(self, *args, **kwargs):
            return get_object_or_404(Product, name=self.kwargs['name'])

    鼻涕虫 如果你使用某些字符等,这些都是百分比编码的,结果是 丑陋的 “网址。

    作为 @Selcuk says name Product 不是 独特的 这意味着相同的名字可以指 倍数 产品。如果您想在URL中使用它,那么您应该使其唯一,而且您可能会更好 执行 在数据库层:

    class Product (models.Model):
    
        name = models.CharField(max_length=50, unique=True, help_text='Full name')
    推荐文章