Django: обработка нескольких запасов (связанных таблиц) в представлении списка на основе продукта
Мне нужно управлять продуктами, совместно используемыми несколькими Хранилищами. Я пытался справиться с этим с помощью annotate, prefetch_related, select_related, но в моем случае эти решения перевернуты для моих нужд. Мне нужно сначала получить продукт, а затем связанный с ним запас на каждом складе и отобразить его в шаблоне, а foreignKey находится в моем Sststock, а не в Product
У меня есть :
Product models.py
class Product(models.Model):
famille = models.ForeignKey(Famille, on_delete=SET_NULL, null=True)
sku = models.CharField(max_length=100, unique=True)
nom = models.CharField(max_length=250)
fournisseur = models.ForeignKey(
Supplier, on_delete=models.SET_NULL, default=12, null=True)
qty = models.IntegerField()
mini = models.IntegerField()
maxi = models.IntegerField()
[...]
Склад models.py
class Warehouse(models.Model):
nom = models.CharField(max_length=100)
code = models.CharField(max_length=10, null=True)
adresse = models.CharField(max_length=255)
cp = models.IntegerField()
ville = models.CharField(max_length=50)
tel = models.CharField(max_length=10)
email = models.EmailField(default='sav@iturbo.fr', null=False, blank=False)
allow_store = models.BooleanField(default=False)
def __str__(self):
return self.nom.upper()
Sststock models.py
class SstStock(models.Model):
sst = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
mageid = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
qty = models.IntegerField()
last_update = models.DateTimeField(default=timezone.now)
На данный момент у меня только 3 склада, но в будущем их может быть больше. Сначала я "жестко закодировал" свои 3 склада в модели Product, но это решение не было легко масштабируемым.
Каким образом лучше всего достичь моей цели? Я видел решение с помощью Mysql Stored Procedures в PhpMyAdmin для создания innerJoin таблиц, но возможно есть возможности в Django.