문제

매우 간단한 방법이 있습니다.

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

Sidename은 팀과 같은 파일에 정의 된 또 다른 모델이며

시도하고 테스트 할 때 :

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

다음 오류가 발생합니다.

return SideNames.objects.filter(team=self)

AttributeError : 'Nonetype'객체는 속성 '개체'가 없습니다.

그러나 내가 시험을 바꾸면

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

그런 다음 오류가 발생하지 않습니다. Test 자체에서 부상자를 호출하고 실제 방법을 호출하는 것의 차이점은 무엇입니까?

참고로, 여기에는 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

그것이 바로 그 방법의 맥락에서 사이드 이름이 왜 없어야하는지에 대해 생각할 수있는 유일한 설명이기 때문에.

옆으로, 방법 자체는 무의미합니다. 거꾸로 관계는 Django에 의해 자동으로 제공되므로 t.sidenames_set.all().

다른 팁

테스트를 정의하는 모듈에서 이름을 가져오고 있습니다. SideNames 다른 모듈에서. 그곳의 모듈에서 sides 메소드는 정의됩니다 SideNames 정의되거나 가져 오지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top