9

当我尝试访问我的产品型号的详细信息页面时收到该错误。我在 url 文件中有 slug 字段,但这似乎并不重要。

模型

class Product(models.Model):
    product_name= models.CharField(max_length=30, blank=False, null=False, verbose_name="the product name")
    product_slug= models.SlugField(max_length=30, blank=False, null=False, verbose_name="the product slug")
    product_excerpt= models.CharField(max_length=100, blank=False, null=False, verbose_name="product excerpt")
    def _set_product_code(self):
        product_code_temp = hashlib.sha224()
        product_hash = self.product_name
        product_hash = product_hash.encode('utf-8')
        product_code_temp.update(product_hash)
        return product_code_temp.hexdigest()[0:5]
product_code = property(_set_product_code)

看法

class ProductPage(DetailView):
    model = Product
    context_object_name = 'product'
    template_name="product.html"

网址

url(r'^product/(?P<product_slug>\w+)/(?P<product_code>\w+)/$', ProductPage.as_view(), name="product"),

谁能指出我做错了什么?

4

3 回答 3

19

在视图类上设置slug_field属性:

class ProductPage(DetailView):
    model = Product
    slug_field = 'product_slug'

根据您的 URLConf,您可能还需要指定与 slug 对应的 kwarg 的名称。它默认为“蛞蝓”。如果您在 URL 规范中使用了不同的内容,例如本例中的“product_slug”,请slug_url_kwarg同时在视图上指定属性:

    slug_url_kwarg = 'product_slug'
    # etc
于 2013-10-16T15:20:07.513 回答
7

我想补充一点,在我们有不同的主键查找参数的情况下,也可以使用get_object

例如,如果我想通过guid获取我的对象,我在我的 URLConf 中传递

def get_object(self):
    return Product.objects.get(guid=self.kwargs.get("guid"))
于 2015-01-13T20:33:12.337 回答
0

模型.py

product_slug = models.SlugField(null=True, blank=True, help_text="Product slug field", db_column="product_slug",
                                verbose_name="slug product", error_messages={"required": "Enter the slug field"},
                                unique=True, )

使用下面的正则表达式为 pk 和 slug 写一行:

网址.py

url(r'(^products/(?P<pk>\d+)/$)|(^products/(?P<product_slug>\w+)/$)',ProductDetailView.as_view(), name='product-detail-view')

视图.py

class ProductDetailView(DetailView):
     model = Products
     extra_context = {'title': 'products-detail-view'}
     pk_url_kwarg = 'pk'
     query_pk_and_slug = True
     slug_field = 'product_slug'
     slug_url_kwarg = 'product_slug'
于 2019-08-23T20:38:42.107 回答