首页 > 解决方案 > 使用序列化器如何在 django rest 框架中创建类别

问题描述

我想用序列化器在 django rest 框架中创建类别。名称将从前端输入字段中提供。我从 user = request.user 获取 user_id,从 request.user.cafe 获取 cafe_id。我需要使用名称、user_id 和 cafe_id 创建类别。我怎样才能做到这一点?

这是模型

class Category(models.Model):
  user = models.ForeignKey(User, related_name="cat", blank=True, null=True, on_delete=models.CASCADE)
  cafe = models.ForeignKey(Cafe, related_name="category", blank=True, null=True, on_delete=models.CASCADE)
  name = models.CharField(max_length=255)
  
  class Meta:
    verbose_name_plural='Categories'
    
  def __str__(self):
    return self.name

这是序列化程序

class CategorySerializer(serializers.ModelSerializer):
  class Meta:
    model = Category
    fields = ['name']

和views.py

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def categoryCreate(request):
  user = request.user
  user_id = Category(user = user)
  cafe = request.user.cafe
  cafe_id = Category(cafe = cafe)
  
  serializer = CategorySerializer(user_id, cafe_id, data=request.data)
  data={}
  if serializer.is_valid():
    serializer.save()
    data["success"] = "Category Has Been Created!"
    return Response(serializer.data, status=status.HTTP_201_CREATED)
  return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

先感谢您

标签: djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-serializer

解决方案


你可以到这个

class UserSerializer(serializers.ModelSerializer):
   class Meta:
      model = User
      fields = "__all__"

class CafeSerializer(serializers.ModelSerializer):
   class Meta:
      model = Cafe
      fields = "__all__"

class CategorySerializer(serializers.ModelSerializer):
  user = UserSerializer(read_only=True)
  cade = CafeSerializer(read_only=True)
  class Meta:
    model = Category
    fields = ['name', 'user', 'cafe']

推荐阅读