Я создаю свою модель в Джанго, и у меня есть много-много отношений между расходными материалами и комплектами фургонов. Идея состоит в том, что «предмет» может принадлежать многим «комплектам фургонов», а «комплект фургонов» может иметь много »предметов. Я создал промежуточную модель, которая будет поддерживать отношения, но я изо всех сил пытаюсь найти способ связать количество в таблице комплекта фургона к количеству в таблице основных расходных материалов. Например, если бы я хотел пометить предмет в комплекте фургона как поврежденный и уменьшить количество этого запаса в комплекте фургона, я бы также хотел уменьшить общее количество этого запаса в основной таблице «расходных материалов» до его пополнения. Я думаю, что, возможно, мне придется создать функцию в моем файле представлений для выполнения этой логики, но я хотел знать, может ли это быть реализован в моей модели модели, чтобы свести к минимуму вероятность ошибки. Вот мой код:
class supplies(models.Model):
class Meta:
verbose_name_plural = "supplies"
# limit the user to selecting a pre-set category
choices = (
('CREW-GEAR','CREW-GEAR'),
('CONSUMABLE','CONSUMABLE'),
('BACK-COUNTRY','BACK-COUNTRY')
)
supplyName = models.CharField(max_length=30, blank=False) # if they go over the max length, we'll get a 500 error
category = models.CharField(max_length=20, choices = choices, blank=False)
quantity = models.PositiveSmallIntegerField(blank=False) # set up default
price = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True) # inputting price is optional
def __str__(self):
return self.supplyName
class van_kit(models.Model):
supply_name = models.ManyToManyField(supplies, through='KitSupplies',through_fields=('vanKit','supplyName'), related_name="supplies")
van_kit_name = models.CharField(max_length=100)
vanName = models.ForeignKey(vans, on_delete=models.CASCADE)
def __str__(self):
return self.van_kit_name
class KitSupplies(models.Model):
supplyName = models.ForeignKey(supplies, on_delete=models.CASCADE)
vanKit = models.ForeignKey(van_kit, on_delete=models.CASCADE)
quantity = models.PositiveSmallIntegerField(blank=False)
def __str__(self):
return str(self.supplyName)
class Meta:
verbose_name_plural = 'Kit Supplies'
Я довольно новичок в django, я должен выучить его для классного проекта, поэтому, если моя логика ошибочна или если лучший способ сделать это очевиден, пожалуйста, с уважением сообщите мне. Я открыт для новых способов сделать это. Кроме того, я прочитал документацию по использованию «through» и «through_fields» для работы с соединительной таблицей, но я боюсь, что я могу использовать ее неправильно. Заранее спасибо.