【发布时间】:2020-04-08 14:47:50
【问题描述】:
我正在尝试将数据添加到我的数据库中。为此目的,我有一个 vue 函数:
@api_view(['POST'])
def update_add_bges(request):
serializer = BGESSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这个调用一个序列化器在数据库中添加新数据:
class BGESSerializer(serializers.ModelSerializer):
laboratoire = LaboratoiresSerializer()
class Meta:
model = BGES
fields = '__all__'
def create(self, validated_data):
laboratoire_data = validated_data.pop('laboratoire')
laboratoire_oj = Laboratoire.objects.create(**laboratoire_data)
validated_data["laboratoire"] = laboratoire_obj["pk"]
bges = BGES.objects.create(**validated_data)
return bges
问题是我的 Laboratoire 类也是嵌套的,应该添加其他类的实例:
class LaboratoiresSerializer(serializers.ModelSerializer):
tutelles = TutellesSerializer(many=True)
class Meta:
model = Laboratoire
fields = '__all__'
def create(self, validated_data):
tutelles_data = validated_data.pop('tutelles')
laboratoire = Laboratoire.objects.create(**validated_data)
for tutelle_data in tutelles_data:
t = Tutelle.objects.get(nom=tutelle_data["nom"])
laboratoire.tutelles.add(t)
return laboratoire
这是行不通的,因为它是序列化程序的创建而不是模型的创建而不是调用。 我应该怎么做 ?当我添加一个实验室时,我有 Tutelle 来创建......我应该在模型中实现创建吗?由于我是 django 新手,我很难理解函数调用的微妙之处。
【问题讨论】:
-
此链接可能会帮助您通过 DRF 序列化程序创建嵌套对象。 stackoverflow.com/questions/34784979/…
标签: django django-models django-rest-framework django-serializer