#python #django #django-models #database-relations
#python #django #django-модели #отношения с базой данных
Вопрос:
У меня есть несколько моделей продуктов, как показано ниже
class ProductBase(models.Model):
name = models.CharField(max_length=50)
class Meta:
abstract = True
def __str__(self):
return self.name
class ProductOne(ProductBase):
color = models.CharField(max_length=50)
class ProductTwo(ProductBase):
type = models.CharField(max_length=50)
class ProductThree(ProductBase):
breed = models.CharField(max_length=50)
Ожидается, что у каждого из этих продуктов будет image_set, поэтому я создал модель ниже для изображений продукта
class Image(models.Model):
product = models.ForeignKey(to=[HERE IS THE PROBLEM], on_delete=models.CASCADE)
image = models.ImageField(upload_to='upload-path')
Как я могу заставить поле product в моем классе Image указывать на любой из продуктов, определенных выше, по желанию.
Ответ №1:
class Image(models.Model):
product = models.ForeignKey(ProductOne, on_delete=models.CASCADE)
image = models.ImageField(upload_to='upload-path')
атрибута ‘to’ нет, вы просто ссылаетесь на нужную вам модель
Ответ №2:
Было бы лучше иметь только одну модель для всех продуктов, например:
class Product(ProductBase):
model = models.CharField(max_length=50) #here for example you put the individual info from the different types of products
color = models.CharField(max_length=50, null=True) #add null=True so you don't have to add it for all the products
etc...
Тогда вам не нужна отдельная Image
модель, вы можете просто добавить ее в качестве поля в свою Product
модель. Я считаю, что это более чистый способ его реализации, поскольку в этом случае нет реальной необходимости иметь несколько моделей.