Как я могу соединить различные экземпляры классов на основе их идентификаторов?
У меня есть два следующих класса:
class Position(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
price = models.FloatField(blank=True)
created = models.DateTimeField(blank=True)
def save(self, *args, **kwargs):
self.price = self.product.price * self.quantity
return super().save(*args, **kwargs)
def __str__(self):
return f"id: {self.id}, product: {self.product.name}, quantity: {self.quantity}"
class Sale(models.Model):
transaction_id = models.CharField(max_length=12, blank=True)
positions = models.ManyToManyField(Position)
total_price = models.FloatField(blank=True, null=True)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
salesman = models.ForeignKey(Profile, on_delete=models.CASCADE)
created = models.DateTimeField(blank=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f"Total sales price: ${self.total_price}"
def get_absolute_url(self):
return reverse('sales:detail', kwargs={'pk': self.pk})
def save(self, *args, **kwargs):
if self.transaction_id == '':
self.transaction_id = generate_code()
if self.created is None:
self.created = timezone.now()
return super().save(*args, **kwargs)
def get_position(self):
return self.positions.all()
Как я могу связать каждый экземпляр позиции с соответствующим экземпляром продажи?
Я пробовал реализовать этот метод:
def get_sales_id(self):
sale_obj = self.sale_set.first()
return sale_obj.id
но в этом случае я всегда буду получать первый id вхождения определенной позиции.
Exaple: pos1: id 1, продукт, количество, цена ... pos2: id 2, продукт, количество, цена ...
продажа1: позиция 1, позиция 2 ... sale2: pos 1, pos3 ...
Когда я пытаюсь объединить их, основываясь на идентификаторе продажи, я получаю:
pos1: id 1, ... , sale_id 1 pos1: id 1, ... , sale_id 1 <= когда должно быть 2!
Я пытался настроить этот фильтр, но я просто не могу понять, как заставить его работать:
def get_id(self):
related_sale_obj = Sale.objects.filter(positions = self)
#related_id = related_obj.id
#sales_id_prefetched = self.sale_set.only('Position').explain()
return related_sale_obj
Если у вас есть идеи, как я могу это исправить, буду очень признателен. Хорошего дня