如何在测试django模型时处理ManyToMany字段



我正在尝试为我的django模型编写测试。然而,我在测试ManyToManyFields时遇到了一个问题,还没有解决。

class TestVolunteeringModels(TestCase):
def setUp(self) -> None:
self.test_need = sample_need(title="Need", description="Description")
self.test_opportunity = sample_opportunity(title="Opportunity", description="Description")
for i in range(10):
self.test_category = sample_category(name="Category")
self.test_need.category = self.test_category
self.test_opportunity.category = self.test_category
def tearDown(self) -> None:
self.test_need.delete()
self.test_opportunity.delete()

这给我带来了这个错误:

TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use category.set() instead.

问题是,当我按照回溯指令中所写的那样使用.set((时,如下所示:

self.test_need.category.set(self.test_category)
self.test_opportunity.category.set(self.test_category)

它给了我另一个错误,它说";TypeError:"Category"对象不可迭代">

所以我的问题是,在这种情况下,我如何访问ManyToMany字段,以便自由测试它?

.set()需要一个可迭代的参数作为参数,但您传递的参数self.test_category是不可迭代的。你有两个选择:

  • 使用.set([self.test_category,])而不是.set(self.test_category)。因此,您传递的是一个可迭代的列表,而不是一个不可迭代的单个对象(因此您得到的错误消息(
  • 或者,您可以使用.add(self.test_category)。函数.add()将单个对象作为位置参数,将它们添加到任何预先存在的类别中

不过,您可能应该选择.set(),因为这可以确保在执行后,关联类别集将恰好是您传递的类别集。

相关内容

  • 没有找到相关文章

最新更新