Django validate_unique ошибка при обновлении из админки

Я создал validate_unique на основе двух полей (актив и портфель), он работает хорошо, когда я пытаюсь создать новый объект, который уже существует, я получаю правильное сообщение.

Но я получаю то же сообщение об ошибке, если пытаюсь обновить существующий объект. Нужно ли мне что-то изменить, чтобы обновление заработало?

class PortfolioAsset(models.Model):
    portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE, default=1)
    asset = models.ForeignKey(Asset, on_delete=models.CASCADE)
    shares_amount = models.FloatField() 
    share_average_price_brl = models.FloatField()
    total_cost_brl = models.FloatField(editable=False)
    total_today_brl = models.FloatField(editable=False)    

    def validate_unique(self, *args, **kwargs):
        super().validate_unique(*args, **kwargs)
        if self.__class__.objects.\
                filter(portfolio=self.portfolio, asset=self.asset).\
                exists():
            raise ValidationError(
                message='This asset already exists in this portfolio.',
                code='unique_together',
            )
    def save(self, *args, **kwargs):
        self.total_cost_brl = round(self.shares_amount * self.share_average_price_brl, 2)
        self.total_today_brl = round(self.shares_amount * self.asset.price, 2)
        super(PortfolioAsset, self).save(*args, **kwargs)

вы можете исключить id текущего экземпляра в случае обновления:

 if self.__class__.objects.\
                filter(portfolio=self.portfolio, asset=self.asset).\
                exclude(id=self.id).\
                exists():

Вы должны исключить экземпляр смородины

from django.db.models import Q


if self.__class__.objects.filter(portfolio=self.portfolio, asset=self.asset).filter(~Q(id=self.id)).exists():
Вернуться на верх