class Course(models.Model):
objects = CourseManager()
class Meta:
ordering = ('ccy',)
verbose_name = _('course.model.verbose_name')
verbose_name_plural = _('course.model.verbose_name_plural')
unique_together = ('ccy', 'base_ccy')
def __str__(self):
return str(self.ccy.code) + '/' + str(self.base_ccy.code)
# первая валюта
ccy = models.ForeignKey(Currency, verbose_name=_('course.model.ccy'), related_name="ccy")
# вторая валюта
base_ccy = models.ForeignKey(Currency, verbose_name=_('course.model.base_ccy'), related_name="base_ccy")
# покупаем
buy = models.DecimalField(verbose_name=_('course.model.buy'), max_digits=20, decimal_places=10, default=0)
# продаем
sale = models.DecimalField(verbose_name=_('course.model.buy'), max_digits=20, decimal_places=10, default=0)
# время последнего обновления
updated_at = models.DateTimeField(auto_now=True)
def clean(self):
if Course.objects.get(ccy=self.base_ccy, base_ccy=self.ccy):
raise ValidationError('Уже есть обратное направление!')
Имею выше написаную модель. В моделе стоит одно условие уникальности при сохранении по двум полям unique_together = ('ccy', 'base_ccy') и дополнительно в методе clean добавлено проверка на обратном направлении полей. Столкнулся с проблемой при верном сохранении Course matching query does not exist, а при неверном метод clean работает. Подскажите как обойти эту проблему?