【问题标题】:Why does the object type of a ManyToMany field change after initialization in django?为什么在django中初始化后ManyToMany字段的对象类型会发生变化?
【发布时间】:2012-08-05 04:23:29
【问题描述】:

好的,所以我尝试在我的单元测试中验证某个字段是 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 时发现了这个错误,现在我很好奇为什么对象的类会发生变化。好像有点太神奇了,怎么解释?

【问题讨论】:

    标签: python django django-models many-to-many


    【解决方案1】:

    Django 中的字段是descriptors,它们不返回自身,而是该字段持有或表示的对象(例如,IntegerField 返回一个整数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多