Отношения один-к-одному, но нескольких типов в Django
Я создаю интернет-магазин с помощью Django. Я решил, что поскольку для продажи могут использоваться различные типы товаров, которые имеют общие атрибуты и поля, мне лучше сделать модель Item Model, а другие модели сделать ее подклассами. Итак, у меня есть абстрактная модель Item и несколько других моделей, таких как Dress, Pants и shoes. Теперь я хочу создать новую модель (например, Comment), которая должна иметь связь с моделью Item. Но поскольку модель Item является абстрактной, я не могу этого сделать. Есть ли способ иметь отношения один к одному, одна сторона которых может принимать различные типы? Что-то вроде этого:
class Comment(models.Model):
item = models.ForeignKey(to=[Dress, Pants, Shoes])
Одно поле Foreing key
может привести только к одному instance
, в базе данных это будет выглядеть следующим образом:
|id| item |
|13|t-shirt|
Лучший способ решить вашу проблему - использовать эти три модели:
class Item_type(models.Model):
#here you should create as many instances as you have types of your items
# one item_type = Dress, second = Pants, third = Shoes
title = models.CharField(max_length=50)
class Item(models.Model):
#here you create your item, with title for example Nike Brand new shooes
title = models.CharField(max_length=150)
#and choosing type in oneToOneField = shooes
item_type = models.OneToOneField(Item_type, on_delete=models.CASCADE)
class Comment(models.Model):
#here you have your comments for your Item
item = models.ForeignKey(Item, on_delete=models.CASCADE)
Generic Relations звучит как решение, в вашей модели Comment добавьте эти поля:
class Comment(models.Model):
[Other fields]
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
и в вашей абстрактной модели Item добавьте поле GenericRelation
class Item(models.Model):
[Other fields]
comments = GenericRelation(Comment)
class Meta:
abstract=True