如何为 Django Rest FrameWork 中具有两个 ManyToManyField 的模型编写 __str__ 方法的测试用例?

how do I write test cases for __str__ method for a model having two ManyToManyFields in Django Rest FrameWork?

这是三个模型,在第 3 个模型中,我们将上述两个模型联系起来。 #models.py

class CategoryDetail(models.Model):
    categoryCode = models.BigAutoField(
        primary_key=True)
    categoryName = models.CharField(max_length=100)
    categoryDescription = models.CharField(max_length=500)

    def __str__(self):
        return self.categoryName

class ProductDetail(models.Model):
    productCode = models.BigAutoField(primary_key=True)
    productName = models.CharField(max_length=100)
    manufacturer = models.CharField(max_length=100)

    def __str__(self):
        return self.productName

class ProductCategoryMapping(models.Model):
    productCategoryCode= models.BigAutoField(primary_key=True)
    productCode= models.ManyToManyField(ProductDetail, related_name='category')
    categoryCode = models.ManyToManyField(CategoryDetail)

    def __str__(self):
        return '%s: %s' % (self.productCategoryCode, self.categoryCode)

这里是有错误的测试

def test_CategoryMapping_str(self):
        product1 = ProductDetail.objects.create(productName = 'AquaTouch')
        category1= CategoryDetail.objects.create(categoryName = 'Trimmer & Shaver')
        categoryMapped = ProductCategoryMapping.objects.create(productCategoryCode= '1', productCode= product1.productCode, categoryCode= category1.categoryCode)
        self.assertEqual(str(categoryMapped), '1:Trimmer & Shaver ')

错误消息显示:“禁止直接分配给多对多集合的前向。请改用 productCode.set()”

如错误所述,问题正在发生,因为您试图直接在 .createproductCode=product1.productCodecategoryCode=category1.categoryCode)中设置 many-to-many 字段.

之后您应该使用 .set()

categoryMapped = ProductCategoryMapping.objects.create(productCategoryCode= '1')
categoryMapped.productCode.set([product1])
categoryMapped.categoryCode.set([category1])

也看看 docs