質問

私は非常に簡単な方法があります:

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は、そのメソッドのコンテキスト内でNoneにすべき理由について考えることができる唯一の説明だから。

はさておき、この方法自体はとして後方の関係を自動的にジャンゴによって提供され、無意味なので、あなただけのt.sidenames_set.all()を呼び出すことができます。

として、

他のヒント

テストを定義するモジュールでは、あなたは、いくつかの他のモジュールから名前SideNamesを読み込みます。そのsidesメソッドが定義されているモジュールでは、名前SideNamesが定義またはインポートされていない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top