【发布时间】:2021-10-23 19:57:01
【问题描述】:
我试图了解 Django REST 框架中从视图类到序列化程序类的代码流。就像我们知道如果我们创建一个类的对象一样,该类将使用该对象进行实例化。如果该类中还有其他函数,我们可以使用我们刚刚创建的对象后跟点和该函数名称来调用该函数。
看起来像这样。
class Person:
def __init__(self, name, address):
self.name = name
self.address = address
def details(self):
print (f"My name is {self.name} and I live in {self.address}")
obj1 = Person("John","London")
obj1.details()
例如在上面的代码中,当我们运行 obj1= .... 时,person 类将使用值 name 和 address 进行实例化。然后我们可以使用我们刚刚创建的类对象obj1调用details函数。
现在在 Django Rest 中,
class LeadsView(APIView):
permission_classes = [IsAuthenticated]
def put(self, request, pk=None, *args, **kwargs):
id = pk
abc = Lead.objects.get(id=id)
print("before serializer")
serializer = LeadSerializer(abc,data=request.data)
if serializer.is_valid():
print("after serializer validation")
serializer.save()
print("after save")
return Response({
"message": "Coupon hase been updated",
"data": serializer.data
}, status=status.HTTP_200_OK)
return Response(serializer.data)
class Leadserializer(serializers.ModelSerializer):
class Meta:
model = Lead
fields = '__all__'
def update(self,instance,validated_data):
..........
print("iam inside the serializer class")
return instance
在这里,我试图让 django 代码类似于简单的类对象,因为这就是我们应该学习的方式,但似乎没有人这样教。这里我认为序列化程序类在serializer = LeadSerializer(abc,data=request.data)这行代码中实例化,其中数据是反序列化的,而abc是序列化的。
但是,就像上面简单的类对象案例一样,我没有使用我创建的序列化器对象调用序列化器类的任何更新函数。那么这里怎么调用更新函数呢??
另外,打印输出如下:
before serializer
after serializer validation
iam inside the serializer class
after save
在这里看到输出模式,我们知道只有在保存功能之后,更新功能才似乎在运行。
【问题讨论】:
标签: python django django-rest-framework instance django-serializer