使用 DRF 保存外键关系
saving foreign key relations using DRF
我正在尝试使用序列化器保存外键关系,我不知道我哪里错了我现在花了几个小时思考他,似乎不明白错误在哪里,创建方法不是工作正常,它也不保存任何数据
class Catalogs(viewsets.ModelViewSet):
queryset = Catalog.objects.all()
serializer_class = CatalogSerializer
def create(self, request, *args, **kwargs):
if request.data:
serialized_data = self.get_serializer(
data = request.data
)
序列化器
class CatalogSerializer(serializers.ModelSerializer):
catalog_products = CatalogProductsSerializer(source = 'catalogproducts_set',many=True)
def create(self,validated_data):
client_id = validated_data.pop('id')
catalog_obj = Catalog.objects.create(
client = User.objects.get(id=client_id),
)
CatalogProducts.objects.create(
catalog = catalog_obj,
**validated_data
)
return catalog_obj
class Meta:
model = Catalog
fields = ['created_by','client','catalog_products','created_datetime','is_active']
如果不看错误信息,很难判断哪里出了问题。
但是您需要更改以下内容:
serialized_data
不是实际的序列化数据,而是序列化器实例。您需要调用序列化程序的 save()
方法来保存实例和 data()
方法来获取序列化数据。
serializer_cls = self.get_serializer()
serializer = serializer_cls(data=request.data)
serializer.is_valid(raise_exception=True)
catalog_instance = serializer.save()
catalog_serialized_data = serializer.data()
我正在尝试使用序列化器保存外键关系,我不知道我哪里错了我现在花了几个小时思考他,似乎不明白错误在哪里,创建方法不是工作正常,它也不保存任何数据
class Catalogs(viewsets.ModelViewSet):
queryset = Catalog.objects.all()
serializer_class = CatalogSerializer
def create(self, request, *args, **kwargs):
if request.data:
serialized_data = self.get_serializer(
data = request.data
)
序列化器
class CatalogSerializer(serializers.ModelSerializer):
catalog_products = CatalogProductsSerializer(source = 'catalogproducts_set',many=True)
def create(self,validated_data):
client_id = validated_data.pop('id')
catalog_obj = Catalog.objects.create(
client = User.objects.get(id=client_id),
)
CatalogProducts.objects.create(
catalog = catalog_obj,
**validated_data
)
return catalog_obj
class Meta:
model = Catalog
fields = ['created_by','client','catalog_products','created_datetime','is_active']
如果不看错误信息,很难判断哪里出了问题。
但是您需要更改以下内容:
serialized_data
不是实际的序列化数据,而是序列化器实例。您需要调用序列化程序的 save()
方法来保存实例和 data()
方法来获取序列化数据。
serializer_cls = self.get_serializer()
serializer = serializer_cls(data=request.data)
serializer.is_valid(raise_exception=True)
catalog_instance = serializer.save()
catalog_serialized_data = serializer.data()