Модульные тесты Django - django.db.utils.IntegrityError: дублированное значение ключа нарушает целостность

Какой лучший способ

class BankLoanApplicationFile(TestCase):

    """Test cases for loan_application.py file."""

    def setUp(self) -> None:
        """Set up configuration."""
    
        self.loan_product = mock.Mock(spec=LoanProduct)
        self.loan_type = LoanType.objects.create()
        self.loan_usage = LoanUsage.objects.create()
        self.profession = Profession.objects.create(name='Architekt/in')

     def tearDown(self) -> None:
         self.loan_type.delete()
         self.loan_usage.delete()

Это ошибка :

django.db.utils.IntegrityError: duplicate key value violates unique constraint.

Какой лучший способ игнорировать эту ошибку с помощью тестов Django, я прочитал несколько постов о подобной проблеме, но не нашел решения

EDIT :

Ниже представлены модели :

class CommonLoanOptions(models.Model):

    name = models.CharField(_('Name'), max_length=64, unique=True)
    is_active = models.BooleanField(_('Is Active'), default=True)

    class Meta:
        abstract = True

    def __str__(self):
        return f'{self.name}'


class LoanProduct(CommonLoanOptions):

    """LoanProduct Model."""

    class Meta:
        verbose_name = _('Loan Product')
        verbose_name_plural = _('Loan Products')
        ordering = ('id',)

class Profession(CommonLoanOptions):

    """Profession Model."""

    class Meta:
        verbose_name = _('Profession')
        verbose_name_plural = _('Professions')
        ordering = ('name',)

class LoanUsage(CommonLoanOptions):

    """LoanUsage Model."""

    class Meta:
        verbose_name = _('Loan Usage')
        verbose_name_plural = _('Loan Usages')

Есть два возможных способа решения этой проблемы.

  1. (рекомендуется) Придайте значение полям при создании записи:

    Например: self.loan_usage = LoanUsage.objects.create(name="any_name")

  2. В файле models.py измените поле name следующим образом:

    name = models.CharField(_('Name'), max_length=64, unique=True, blank=True)

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