我有一个很简单的方法:

Class Team(models.Model):
    def sides(self):
      return SideNames.objects.filter(team=self)

SideNames是在相同的文件中定义的队另一个模型,

其中,当我尝试和测试:

self.assertEquals(len(t.sides()), 2)

我得到以下错误:

return SideNames.objects.filter(team=self)
     

AttributeError的: 'NoneType' 对象没有属性 '对象'

,但如果我改变测试是

self.assertEquals(len(SideNames.objects.filter(team=t)), 2)

然后我没有得到这个错误。什么是从测试本身调用SideNames.objects.filter和调用实际的方法之间的区别?

有关参考,这里是第2类的全部。

class Team(models.Model):
    """The model for a football team."""

    class Admin:
            pass

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

    def is_player(self, player):
            """Checks to see if 'player' is a member if this team. Returns True if they are, or False otherwise."""

            try:
                    teamPlayer = TeamPlayers.objects.get(player=player, team=self)
                    return True
            except ObjectDoesNotExist:
                    return False

    def sides(self):
            """Return the side names for this team"""
            return SideNames.objects.filter(team=self)

    def updateSides(self, side_a, side_b):
            """Update the side names"""
            names = SideNames.objects.filter(team=self);

            a = SideNames.objects.get(name = names[0].name)
            a.name = side_a
            a.save()

            b = SideNames.objects.get(name = names[1].name)
            b.name = side_b
            b.save()

    name = models.CharField("Team Name", max_length=255)
    organiser = models.ForeignKey(User)

class SideNames(models.Model):
    """Holds the names of the sides for each team"""

    class Admin:
            pass

    def __unicode__(self):
            """Pretty print the SideNames object"""
            return self.name

    team = models.ForeignKey(Team)
    name = models.CharField(max_length=128)
有帮助吗?

解决方案

以任何机会,并测试做这样的事情:

from myapp import models

...

models.SideNames = None

因为这是我能想到的,为什么SideNames应无该方法的上下文中的唯一解释。

顺便说一句,该方法本身是没有意义的,因为向后关系自动Django提供,所以你可以只调用t.sidenames_set.all()

其他提示

在定义该测试模块,要导入从某些其他模块的名称SideNames。在该sides方法被定义的模块,该名称SideNames没有定义或导入。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top