我无法在序列化程序中获取当前用户。我已传递了上下文,但仍收到如下错误
"user": [
"This field is required."
]
序列化程序.py
class AddressSerializer(ModelSerializer):
class Meta:
model = Address
fields = "__all__"
def create(self, validated_data):
request = self.context["request"]
validated_data["user"] = request.user
return super().create(validated_data)
查看次数.py
class AddAddress(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
print(request.user)
serializer = AddressSerializer(data=request.data, context={"request":request})
if serializer.is_valid():
serializer.save()
return Response(serializer.data, 200)
return Response(serializer.errors)
型号.py
class Address(models.Model):
user = models.ForeignKey(Account, on_delete=models.CASCADE)
full_name = models.CharField(max_length=35)
email = models.EmailField(max_length=100)
phone = models.BigIntegerField()
address_line_1 = models.TextField(max_length=500)
address_line_2 = models.TextField(max_length=500)
zip_code = models.IntegerField()
city = models.CharField(max_length=20)
state = models.CharField(max_length=15)
country = models.CharField(max_length=15)
class Meta:
verbose_name_plural = "Address"
def __str__(self):
return self.full_name
我完全不知道这背后的问题
4条答案
按热度按时间qhhrdooz1#
您可以使用保存()方法执行此操作
z0qdvdin2#
试试这个:
而不是这个
request = self.context["request"]
jfewjypa3#
因为
user
是序列化器中必需的,这意味着当post请求时必须发送user
数据。从您的代码中,您希望根据登录的用户添加地址。因此,user
不需要通过前端发送。请尝试以下操作:uplii1fm4#
它是一个外键。您需要为其分配ID,而不是整个用户。validated_data[“user”] = request.user.id
如果错误仍然存在,则问题似乎是validated_data中没有“user”字段。您在请求中发送到序列化程序的数据存在问题。如果它与必需字段不匹配,则验证数据将为空。请打印并检查验证数据以及请求数据。