Перенос продуктов вместе с отношениями категорий django
Я создал следующие отношения для продуктов и категорий.
class Category(models.Model):
DoesNotExist = None
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(verbose_name='category name', max_length=50)
slug = models.SlugField()
parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
full_path = [self.name]
k = self.parent
while k is not None:
full_path.append(k.name)
k = k.parent
return ' -> '.join(full_path[::-1])
class Product(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
product_name = models.CharField(verbose_name='product_name', null=False, max_length=200)
product_description = models.TextField(verbose_name='product description', null=False, max_length=1000)
stock = models.IntegerField(verbose_name='stock', null=False)
expire_date = models.DateTimeField(verbose_name='expire date')
company = models.ForeignKey(Company, on_delete=models.CASCADE)
store = models.ForeignKey(Store, blank=True, null=True, on_delete=models.SET_NULL)
category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.product_name
def get_cat_list(self):
k = self.category # for now ignore this instance method
breadcrumb = ["dummy"]
while k is not None:
breadcrumb.append(k.slug)
k = k.parent
for i in range(len(breadcrumb) - 1):
breadcrumb[i] = '/'.join(breadcrumb[-1:i - 1:-1])
return breadcrumb[-1:0:-1]
Но я хотел бы получить такой вывод, когда я принимаю продукты. Это возможно?
[
{
"name":Cars,
"slug":"cars",
"subcategories":{
"id":,
"name":,
}
},
]
А класс представления будет таким
products = Product.objects.all()
product_serializer = ProductSerializer(products, many=True)
return Response({'data': products.data}, status=200)
Есть ли в django функциональность, благодаря которой, если у меня есть отношения с классом в нескольких моделях, я могу взять на себя все данные, с которыми у меня есть отношения?
Что-то подобное в laravel?