Django中奇怪的“DoesNotExist”异常

时间:2013-10-26 03:19:57

标签: django django-models

有一个简单的代码:

    class City(models.Model):
        slug = models.SlugField(max_length=150, unique=True)
        name = models.CharField(max_length=255)


    class CityPart(models.Model):
        city = models.ForeignKey('City', related_name='rel_cityparts')
        slug = models.SlugField(max_length=150, unique=True)
        name = models.CharField(max_length=255)

        def __unicode__(self):
            #return self.name
            return u'%s (%s)' % (self.name, self.city.name)

我发现__unicode__方法失败,导致DoesNotExist异常。 Django“认为”相关城市不存在,认为它确实存在。我重新检查过它,数据库是有效的。我使用Sqlite和Postgres,都加载\转储数据库数据,但都引发了这个异常。所以我认为它与某些代码问题有关,而与数据库不一致有关。

完整的追溯在这里(真的没有信息):http://dpaste.com/hold/1429873/

当我检查文件virtenv_macos/lib/python2.7/site-packages/debug_toolbar/panels/template.py,第85行(*pformat(value)*)中的值时,它告诉我“value”变量具有以下值:*[broken repr (DoesNotExist)]*

MacOS,Python 2.7,Django 1.5.2

P.S。当我试图查看DB记录列表(ListView)时,异常会引发,而不是在我尝试创建新记录时。

2 个答案:

答案 0 :(得分:0)

我认为你应该发布this帖子。

如果你正在尝试创建一个CityPart实例并调用____unicode____方法并且你没有设置城市,那么它会引发异常。

你的错误代码可能是:

c = CityPart()
c  # This fail because you don't set the City!


#  try that
city = City(name='foo', slug='fooslug')
city.save() 
c = CityPart(city=city, name='bar')
c  # MAYBE this works, maybe

尝试不要在____ unicode____方法中使用城市:

class City(models.Model):
    slug = models.SlugField(max_length=150, unique=True)
    name = models.CharField(max_length=255)


class CityPart(models.Model):
    city = models.ForeignKey('City', related_name='rel_cityparts')
    slug = models.SlugField(max_length=150, unique=True)
    name = models.CharField(max_length=255)

    def __unicode__(self):
        #return self.name
        return u'%s' % (self.name,)

对不起我的英文。 希望有所帮助!

答案 1 :(得分:0)

这是因为django-debug-toolbar应用程序,它是“debug_toolbar.middleware.DebugToolbarMiddleware”中间件。遗憾的是,没有时间调试它。刚评论出来。