Ограничение Django: разрешить одному полю иметь только одну комбинацию с другим полем и при этом разрешить исторические данные
Я пытаюсь создать ограничение для таблицы Offer, в которой есть offer_id (charfield) и product_id (foreign key), где offer_id может быть объединен только с одним продуктом. Не допускается, чтобы offer_id сочетался с несколькими продуктами.
Я не могу сделать offer_id просто уникальным, так как эта таблица использует исторические данные. Как я могу сделать ограничение для моей django Model, которое гарантирует, что каждый offer_id связан не более чем с одним продуктом, продукт может иметь несколько offer_id, а один offer_id может встречаться несколько раз из-за исторических данных.
Простой обзор модели предложения:
class Offer(models.Model):
offer_id = models.CharField(max_length=45, default=-1)
seller = models.ForeignKey(Seller, on_delete=models.CASCADE, null=True, blank=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
time = models.DateTimeField(default=timezone.now)
class Meta:
constraints = [
models.UniqueConstraint(fields=['offer_id'], condition=?, name='unique_offer_product')
]
def __str__(self):
return f"Product {self.product} with seller {self.seller} has offer_id {self.offer_id}"