Мне нужна цена продукта между двумя таблицами Sellers и Products.
Вот мои модели-
class Products(models.Model):
name = models.CharField(max_length=60)
price= models.IntegerField(default=0)
category= models.ForeignKey(Category,on_delete=models.CASCADE,default=1 )
description= models.TextField(blank=True, null= True)
image= models.ImageField(upload_to='uploads/products/')
def __str__(self):
return self.name
class Sellers(models.Model):
name = models.CharField(max_length=60)
products = models.ManyToManyField(Products)
description= models.TextField(blank=True, null= True)
image= models.ImageField(upload_to='uploads/sellers/')
def __str__(self):
return self.name
Где поставить цену товара для каждого продавца?
Я бы создал новый класс Price и сохранил там цены продавца:
class Price(models.Model):
seller = models.ForeignKey(Seller,on_delete=models.CASCADE)
product = models.ForeignKey(Product,on_delete=models.CASCADE)
price = models.IntegerField()
Вам следует подумать о создании ограничения уникальности, чтобы избежать нескольких цен на товары для одной комбинации продавцов товаров.
Обновлять: Если вы хотите, чтобы дополнительные поля находились в той же таблице, что и отношения «многие-многие», ознакомьтесь с ответом Виллема Ван Онсема, который предложил использовать параметр через. См. Документация Джанго
Вы можете определить это в соединительный стол [wiki]ManyToManyField
, указав Модель through=…
[Django-doc]:
class Product(models.Model):
name = models.CharField(max_length=60)
price = models.IntegerField(default=0)
category = models.ForeignKey(Category,on_delete=models.CASCADE,default=1 )
description = models.TextField(blank=True, null= True)
image = models.ImageField(upload_to='uploads/products/')
def __str__(self):
return self.name
class Seller(models.Model):
name = models.CharField(max_length=60)
products = models.ManyToManyField(
Product,
through='SellerProduct'
)
description= models.TextField(blank=True, null= True)
image= models.ImageField(upload_to='uploads/sellers/')
def __str__(self):
return self.name
class SellerProduct(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
price = models.IntegerField()
Это хорошее дополнение к моему ответу! Я не знал об опции «сквозь», это здорово, если вы хотите иметь дополнительные поля внутри таблицы manytomany. Проголосую за этот ответ и добавлю комментарий к моему.