楷模
class Product(models.Model):
name = models.CharField(max_length=150, db_index=True,
verbose_name='Название')
slug = models.SlugField(max_length=150, db_index=True)
price = models.DecimalField(max_digits=10, decimal_places=2,
verbose_name='Цена')
category = models.ForeignKey(Category,
related_name='category',
null=True,
blank=True,
verbose_name='Категория',
on_delete=models.CASCADE,
)
sales = models.ManyToManyField(Sale,
related_name='sales',
verbose_name='Скидка',
blank=True
)
class Sale(models.Model):
name = models.CharField(max_length=150)
description = models.CharField(max_length=255)
percent = models.IntegerField(verbose_name='Процент')
class Meta:
ordering = ('name', 'percent')
verbose_name = 'Скидка'
verbose_name_plural = 'Скидки'
def __str__(self):
return self.name
序列化器
class SaleSerializer(serializers.ModelSerializer):
class Meta:
model = Sale
fields = ['name', 'percent']
class ProductSerializer(serializers.ModelSerializer):
category = CategorySerializer(read_only=True)
sale = SaleSerializer(many=True, read_only=True)
class Meta:
model = Product
fields = ['slug', 'name', 'price', 'sale',
'category']
lookup_field = 'slug'
看法
class ProductsBySales(ListAPIView):
serializer_class = ProductSerializer
filterset_class = ProductSaleFilter
def get_queryset(self):
return Product.objects.exclude(sales=None)
前面给出的对象:
[
{
"slug": "8",
"name": "8",
"price": "1.00",
"category": {
"name": "phones",
"parental_category": null
},
},
在您的模型中,该字段称为
sales.或者,您可以简单地将序列化程序中的字段更改为
sales.