Class meta获得了无效的属性

时间:2014-10-25 15:25:26

标签: django python-2.7

请在详细研究后放弃修复此Meta类值。 我在尝试使用" get_absolute_url"处理模板网址时收到错误。因为它响应跟随错误。

  

TypeError:' class Meta'得到无效的属性:sale_price,get_absolute_url。

以下是我的代码。

class Meta:
        db_table = 'products'
        ordering = ['-created_at']

        def __unicode__(self):
            return self.name

        @models.permalink
        def get_absolute_url(self):
            return ('catalog_product', (), {'product_slug': self.slug})

        def sale_price(self):
            if self.old_price > self.price:
                return self.price
            else:
                return None

感谢。

1 个答案:

答案 0 :(得分:7)

您误解了模型的定义方式。您将方法和属性添加到实际的Model类中,并使用Meta类来指定类的选项:

class MyModel(models.Model):
    old_price = ...
    price = ...
    slug = ...
    created_at = ...
    ...

    def __unicode__(self):
        return self.name

    @models.permalink
    def get_absolute_url(self):
        return ('catalog_product', (), {'product_slug': self.slug})

    def sale_price(self):
        if self.old_price > self.price:
            return self.price
        else:
            return None
    class Meta:
        db_table = 'products'
        ordering = ['-created_at']

阅读Model documentation并注意Meta options

部分

修改

另外,请勿使用permalink装饰器,因为它不再推荐:

https://docs.djangoproject.com/en/1.6/ref/models/instances/#the-permalink-decorator

  

不再推荐永久链接装饰器。您应该在get_absolute_url方法的主体中使用reverse()。