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():