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.

Вернуться на верх