[英]Django-REST-Framework: ForeignKey instance is not passed to validated_data
I'm trying to create an instance overriding create
method and passing the ForeignKey
instance in the data, but that field is not included in validated_data
passed to create
method. 我正在尝试创建一个覆盖
create
方法的实例,并在数据中传递ForeignKey
实例,但是该字段未包含在传递给create
方法的validated_data
。 How can I pass that to create
?? 我怎样才能通过
create
?
I have this model. 我有这个模特。
class UserProfile(models.Model):
name = models.CharField(verbose_name='Name', max_length=50)
email = models.EmailField(verbose_name='Email')
address = models.TextField(verbose_name='Address', null=True, blank=True)
user = models.OneToOneField(User, verbose_name='User', on_delete=models.CASCADE)
And here's my serializer. 这是我的序列化器。
class UserProfileSerializer(ModelSerializer):
class Meta:
model = UserProfile
fields = '__all__'
depth = 2
def create(self, validated_data):
print(validated_data)
return UserProfile.objects.create(**validated_data)
Here's my view. 这是我的看法。
class UserRegisterView(APIView):
def post(self, request, format=None, *args, **kwargs):
name = request.data.get('name')
email = request.data.get('email')
password = request.data.get('password')
address = request.data.get('address')
if name and email and password:
user = User.objects.create_user(username=email, password=password, email=email)
request.data['user'] = user
serializer = UserProfileSerializer(data=request.data)
if serializer.is_valid():
user_profile = serializer.save()
Even though I'm passing User
object to serializer it's not included in the validated_data
. 即使我将
User
对象传递给序列化器,也不包含在validated_data
。 Official doc suggests to create another serializer for User
model and use that, but is there any other way without creating that serializer ?? 官方文档建议为
User
模型创建另一个序列化器并使用它,但是还有其他方法可以不创建该序列化器吗?
You can pass it as additional argument of save method : 您可以将其作为save方法的附加参数传递:
serializer = UserProfileSerializer(data=request.data)
if serializer.is_valid():
user_profile = serializer.save(user=user)
From the docs: 从文档:
Any additional keyword arguments will be included in the validated_data argument when .create() or .update() are called.
调用.create()或.update()时,任何其他关键字参数都将包含在validated_data参数中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.