Model在Manager中没有属性“DoesNotExists”

时间:2014-11-30 13:28:02

标签: python django django-orm

Django 1.7 Exceptions文档exceptions.DoesNotExist

  

找不到对象时会引发DoesNotExist异常   查询的给定参数。 Django提供了一个DoesNotExist   异常作为每个模型类的属性来标识类   无法找到的对象,并允许您捕获特定的对象   使用try / except的模型类。

基于上述文档,我编写了自定义模型管理器:

class CountryManager(models.Manager):
    def get_special(self, *args, **kwargs):
        kwargs.update({'country': settings.ACTIVE_COUNTRY})
        try:
            return self.get(*args, **kwargs)
        except self.model.DoesNotExists:
            self.logger.warning('Unable to find specific object using filter {}'.format(kwargs))
            kwargs.update({'country': settings.DEFAULT_COUNTRY})
            return self.get(*args, **kwargs)

请注意: {'country': settings.ACTIVE_COUNTRY}{'country': settings.DEFAULT_COUNTRY}的行已针对此示例进行了简化

class CountryModelMixing(models.Model):
    country = models.CharField(
        max_length=2,
        default=settings.DEFAULT_COUNTRY,
        choices=settings.COUNTRIES,
        verbose_name=_('country')
    )

    objects = CountryManager()

    class Meta:
        abstract=True


class Product(CountryModelMixing):
    name = models.CharField(max_length=40)

在代码中我试图:

Product.objects.get_special(name='abc')

我收到了以下错误:

/opt/src/common/managers.py in get_special(self, *args, **kwargs)
     40         try:
     41             return self.get(*args, **kwargs)
---> 42         except self.model.DoesNotExists:
     43             self.logger.warning('Unable to find specific object using filter {}'.format(kwargs))
AttributeError: type object 'Product' has no attribute 'DoesNotExists'

2 个答案:

答案 0 :(得分:6)

DoesNotExist不接受“s”:

except self.model.DoesNotExist:

答案 1 :(得分:1)

你错过了例外的名称:

except self.model.DoesNotExists:
#                             ^

例外名称为DoesNotExist,最后没有s