-1

我在 model.py 中定义了以下 get_absolute_url:

class Product(models.Model):

  def get_absolute_url(self):
      return "/products/category/type/%d%s%d" % (self.owner.id,
      self.owner, self.id)  

我在 urls.py 中定义了以下 urlconf:

url(r'^products/category/type/(\w+)(\w+)(\w+)/$', 'detail'),

在views.py 中的'detail' 方法中,我如何使用它的get_absolute_url 来引用Product 对象的实例?

我是新来的。谢谢您的帮助!

4

1 回答 1

1

我猜你真正想做的只是在detail视图中获取相关对象。

但首先,警告一句:您的 URL 很奇怪,不会给您预期的结果。所有者 id、所有者和 id 的值之间没有区别,因此正则表达式将始终将所有字符分配到最后两个作为所有者 id,并将每个字符分配给所有者和 id。例如,如果您的 URL 是products/category/type/1daniel34/, 而不是被解析为('1', 'daniel', '34')this 将始终被解析为('1daniel', '3', '4'). 您应该在要捕获的每个元素之间放置一个斜杠,使用\d而不是\w匹配数字,并使用命名组:

^products/category/type/(?P<owner_id>\d+)/(?P<owner>\w+)/(?P<id>\d+)/$

(此外,您应该考虑使用装饰permalink来生成绝对 URL,而不是从 urlconf 复制整个字符串。)

现在,一个观点是它传递了从 URL conf 捕获的值。因此,您对绝对 URL 的引用令人困惑:没有理由关心 get_absolute_url 生成的值,您只需使用在视图中传递的值来查询数据库。在这种情况下,您的视图将如下所示:

def detail(owner_id, owner, id):
    product = Product.objects.get(id=id, owner_id=owner_id)
    ...etc...

请注意,我省略了对 的引用owner,因为所有者 ID 似乎足以识别对象。实际上,我会说 id 本身就足够了,因为它是唯一的,并且您根本不需要所有者:但这由您决定。

于 2012-07-28T21:34:37.593 回答