maxclax
@maxclax

Как пройти валидацию в DJANGO?

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 работает. Подскажите как обойти эту проблему?
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 1
Если единственная информация которая вам, нужна существует ли такая запись в бд, то для этого есть специальный метод: exists
djbook.ru/rel1.7/ref/models/querysets.html#django....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы