我有一个POST方法,该方法将用于检索JSON对象,然后将其用于检索first_name,last_name和用户名-尽管我不知道如何获取字段(即用户名)序列化后。最好的方法是什么?
views.py
@api_view(['POST'])
def createUser(request):
# Making a Connection w/ MongoClient
client = MongoClient('mongodb+srv://test_user:0FP33TLJVWrjl8Vy@cluster0.5sacp.mongodb.net/sample_clubs?retryWrites=true&w=majority')
# Getting the Database
db = client['sample_clubs']
# Getting the Collection/Table
collection = db['users']
serializer = MyUserSerializer(data=request.data)
# Gives bug if next 2 lines aren't here
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
serializers.py
class MyUserSerializer(serializers.ModelSerializer):
def get_first_name(self, obj):
# obj is model instance
return obj.first_name
def get_last_name(self, obj):
# obj is model instance
return obj.last_name
def get_user_name(self, obj):
# obj is model instance
return obj.user_name
class Meta:
model = MyUser
fields = ['first_name', 'last_name', 'username']
# fields = '__all__'
models.py
class MyUser(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
username = models.CharField(max_length=200)
def __str__(self):
return self.username
答案 0 :(得分:1)
DRF中序列化器的save
方法将返回已保存的实例。因此,您可以像这样简单地调用其任何字段:
if serializer.is_valid():
obj = serializer.save()
print(obj.user_name)
该数据还将通过序列化程序的验证数据提供:
if serializer.is_valid():
print(serializer.validated_data.get('user_name')
您还可以使用由序列化程序生成的原始JSON:
# note that serializer.data won't be available if 'is_valid()` returns False
print(serializer.data["user_name"])
此外,您不应该在serializer.data
范围之外返回is_valid
。如果is_valid()
是False
,那么将没有任何数据,因此您将遇到错误。正确的方法是这样:
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors)
如果您只想返回user_name
作为响应:
if serializer.is_valid():
obj = serializer.save()
return Response({"username": obj.user_name})
return Response(serializer.errors)