Как написать тестовые примеры для метода __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.

Вернуться на верх