Как написать тестовые примеры для метода __str__ для модели с двумя полями ManyToManyFields в Django Rest FrameWork?
Вот три модели, где в третьей модели мы связываем две вышеупомянутые модели. #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
).
Вы должны использовать .set()
после этого:
categoryMapped = ProductCategoryMapping.objects.create(productCategoryCode= '1')
categoryMapped.productCode.set([product1])
categoryMapped.categoryCode.set([category1])
Посмотрите также docs.