django - 无法覆盖 drf 嵌套序列化程序 CREATE
问题描述
我正在尝试Product
使用邮递员创建一个类的实例,但对我没有任何作用。我试过只添加一个category
,还给出一个类别列表category_ids
,仍然没有成功。
谁能指出,我做错了什么?我到处搜索,但找不到解决方案。
为什么我会收到这个 keyError?
楷模:
class Category(models.Model):
name = models.CharField(max_length=80)
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
return self.name
class Product(models.Model):
category = models.ManyToManyField(Category, blank=False)
name = models.CharField(max_length=100)
description = models.TextField(max_length=250)
price = models.DecimalField(max_digits=6, decimal_places=2)
quantity = models.IntegerField(default=0)
class Meta:
ordering = ("name", )
def __str__(self):
return self.name
序列化器:
class ProductSerializer(serializers.ModelSerializer):
category = CategorySerializer(many=True, required=False)
category_ids = serializers.PrimaryKeyRelatedField(source='category', many=True, queryset=Category.objects.all())
class Meta:
model = Product
fields = (
"id", "name", "category_ids", "category", "description", "price",
"quantity"
)
def create(self, validated_data):
categories = validated_data.pop('category')
product = Product.objects.create(**validated_data)
Category.objects.create(product=product, **categories)
return product
意见:
class ProductView(viewsets.ModelViewSet):
serializer_class = ProductSerializer
queryset = Product.objects.all()
def perform_create(self, serializer):
serializer.save(created_by = self.request.user)
def perform_update(self, serializer):
serializer.save(updated_by = self.request.user)
def perform_destroy(self, instance):
instance.deleted_by = self.request.user
instance.deleted_at = timezone.now()
instance.save()
错误:
Exception Type: KeyError
Exception Value: 'category'
解决方案
推荐阅读
- apache-flink - MapState 在 RichCoFlatMapFunction 中始终为空
- codenameone - 代号一中如何使用坐标布局?
- ios - PWA 与 Safari 网站有什么区别?
- c++ - 使用 cmake 在 Linux for Windows 上交叉编译程序
- php - PhpStorm:更改 DocumentRoot 后更改 URL
- vba - 如何使用 VBA 在 ms 访问表单中创建自定义自动编号?
- javascript - JavaScript:从对象数组中删除空/未定义/空属性
- php - 当两个不同的路由组内有相同的路由时,如何管理 Blade 中的路由?
- python - 提取量的正则表达式
- mongoose - 猫鼬 findByIdAndUpdate - 检查字段并修改它