下午好,我正在制作一个 API,但遇到了一个问题,嵌入式灭菌器无法工作。 型号
from django.db import models
def upload_to(instance, filename):
return 'posts/{filename}'.format(filename=filename)
class Brands (models.Model):
BrandsDescription=models.TextField(null=True)
def __str__(self):
return self.BrandsDescription[0:50]
class Cosmetic (models.Model):
CosmeticName = models.TextField(default="")
CosmeticDescription = models.TextField(null=True)
Price = models.IntegerField(null=True)
UrlsImage = models.ImageField(upload_to=upload_to, default = "")
IsItNew = models.BooleanField(default="")
Brands = models.ForeignKey(Brands,related_name="brands", on_delete=models.CASCADE)
def __str__(self):
return self.CosmeticName[0:50]
class Order (models.Model):
UserToken = models.TextField(default="")
Date= models.DateTimeField(auto_now_add=True)
Product = models.ManyToManyField(Cosmetic)
Price = models.IntegerField(null=True)
class Meta:
ordering = ['UserToken']
def __str__(self):
return self.UserToken[0:50]
序列化器
from dataclasses import field
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import *
class BrandsSerializer(ModelSerializer):
class Meta:
model= Brands
fields='__all__'
class CosmeticSerializer(ModelSerializer):
brands=BrandsSerializer(read_only=True, many=True)
class Meta:
model= Cosmetic
fields=('CosmeticName','CosmeticDescription','Price','UrlsImage','IsItNew','brands')
class OrderSerializer(ModelSerializer):
product = CosmeticSerializer(read_only=True, many=True)
class Meta:
model= Order
fields=('UserToken','Date','product','Price')
class postOrderSerializer(ModelSerializer):
class Meta:
model= Order
fields='__all__'
浏览次数 从rest_framework.decorators导入api_view 从rest_framework导入视图集 从rest_framework.response导入响应 从rest_framework.permissions导入* 从rest_framework.authentication导入TokenAuthentication 从 api.permissions 导入 IsAdminOrReadOnly 从 .serializers 导入 * 从 django_filters.rest_framework 导入 DjangoFilterBackend 从rest_framework.filters导入SearchFilter
class BrandsAPI(viewsets.ModelViewSet):
queryset= Brands.objects.all()
serializer_class = BrandsSerializer
def get_paginated_response(self, data):
return Response(data)
class CosmeticAPI(viewsets.ModelViewSet):
queryset= Cosmetic.objects.all()
serializer_class = CosmeticSerializer
def get_paginated_response(self, data):
return Response(data)
class OrderAPI(viewsets.ModelViewSet):
queryset= Order.objects.all()
serializer_class = OrderSerializer
filter_backends = (DjangoFilterBackend, SearchFilter)
search_fields = ['UserToken']
def get_paginated_response(self, data):
return Response(data)
class PostOrderAPI(viewsets.ModelViewSet):
queryset= Order.objects.all()
serializer_class= postOrderSerializer
结果
你混淆了很多事情。让我们从您的模型开始。
在模型
Cosmetics
内,有一个名为Brands
的字段,它是模型ForeignKey
的Brands
,您将相关名称设置为brands
。这意味着从 Brands
的实例中,您可以访问链接到该 Cosmetic
实例的所有 Brands
。因此,一个不令人困惑的相关名称可以cosmetics
。
现在让我们进入序列化器。
在
CosmeticSerialiers
中,您创建了一个名为 brand
的字段,它是 BrandsSerializer
的嵌入式序列化程序,但这是完全错误的。每种化妆品仅与一个品牌相关联。
如果您想做您想做的事情,可以在
BrandsSerializer
中添加字段
brands = CosmeticSerializer(read_only=True, many=True)
对于
OrderSerializer
,问题是您的字段名称有拼写错误。
在模型
Order
中,ManyToMany字段是Product
,但在OrderSerializer中,设置嵌入序列化器CosmeticSerializer
的字段是product
。大写字母改变了一切,这意味着这是您在OrderSerializer
中创建的全新字段。
我建议您遵循 PEP 的命名约定。
snake_case
PascalCase