Моя цель - включить атрибут name
модели Brand
и ссылки Product
через models.ForeignKey
, когда я делаю запрос на получение продуктов.Именно то, что этот фрагмент кода возвращает в оболочке Python:
Product.objects.all().values('name', 'brand__name',)
возвращает это:
[
{'name': 'B-1', 'brand__name': 'B-brand'},
{'name': 'B-2', 'brand__name': 'B-brand'},
{'name': 'C-1', 'brand__name': 'C-brand'}
]
Я уже использую django-filters
для фильтрации моих запросов на получение.
Модели:
class Brand(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=255)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE, default=None)
def __str__(self):
return self.name
Сериализаторы:
class BrandSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Brand
fields = ('id', 'url', 'name')
class ProductSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Product
fields = ('id', 'url', 'name', 'brand')
Фильтр:
class ProductFilter(filters.FilterSet):
name = filters.CharFilter(lookup_expr = 'icontains')
brand__name = filters.CharFilter(lookup_expr = 'icontains')
class Meta:
model = Product
fields = ('name' 'brand__name',)
Просмотр:
class ProductView(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filterset_class = ProductFilter
с brand__name
внабор фильтров, я могу ссылаться на название модели бренда, на которую ссылается определенный продукт, и извлекать ее.Моя цель состоит в том, чтобы при создании get request
я также включил это же имя бренда вместе с атрибутами товара, который в настоящее время дает только URL / ссылку на бренд (вместе со всеми другими атрибутами Product
).