如何为 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()”
如错误所述,问题正在发生,因为您试图直接在 .create
(productCode=product1.productCode
和 categoryCode=category1.categoryCode
)中设置 many-to-many 字段.
之后您应该使用 .set()
:
categoryMapped = ProductCategoryMapping.objects.create(productCategoryCode= '1')
categoryMapped.productCode.set([product1])
categoryMapped.categoryCode.set([category1])
也看看 docs。
这是三个模型,在第 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()”
如错误所述,问题正在发生,因为您试图直接在 .create
(productCode=product1.productCode
和 categoryCode=category1.categoryCode
)中设置 many-to-many 字段.
之后您应该使用 .set()
:
categoryMapped = ProductCategoryMapping.objects.create(productCategoryCode= '1')
categoryMapped.productCode.set([product1])
categoryMapped.categoryCode.set([category1])
也看看 docs。