0

さて、私はユニットテストで特定のフィールドがManyToManyFieldオブジェクトであることを確認しようとしています。これが元のクラスであり、その後に関連する単体テストコードが続きます。

class Course(models.Model):
    name = models.CharField(max_length=150)
    studyunits = models.ManyToManyField(StudyUnit)

class CourseManyToManyTest(VocabTestCase):
    fixtures = ['m2mtest.json']

    def setUp(self):
        self.course = Course.objects.create(name="Course2")
        self.studyunit1 = StudyUnit.objects.all()[0]
        self.studyunit2 = StudyUnit.objects.all()[1]

    def testStudyUnitsAddDelete(self):
        self.assertIsInstance(self.course.studyunits, models.ManyToManyField)

そのテストは次のエラーで失敗します。

self.assertIsInstance(self.course.studyunits, models.ManyToManyField)
AssertionError: <django.db.models.fields.related.ManyRelatedManager object at 0x102853690>      is not an instance of <class 'django.db.models.fields.related.ManyToManyField'>

これを確認するのはばかげているように思えますが、ManyToManyFieldを拡張しようとしたときにこのバグを見つけたので、オブジェクトのクラスが変更される理由に興味があります。少し不思議すぎるようですが、説明は何ですか?

4

1 に答える 1

0

Djangoのフィールドは記述子であり、それ自体を返すのではなく、フィールドが保持または表すオブジェクトを返します(たとえばIntegerField、整数を返します)。

于 2012-08-05T04:33:53.297 に答える