我正在尝试创建一个覆盖create
方法的实例并在数据中传递ForeignKey
实例,但是该字段未包含在传递给validated_data
的{{1}}中方法。如何将其传递给create
?
我有这个模特。
create
这是我的序列化器。
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)
这是我的观点。
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)
即使我将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()
对象传递给序列化器,它也不包含在User
中。官方文档建议为validated_data
模型创建另一个序列化器并使用它,但是还有其他方法可以不创建该序列化器吗?
答案 0 :(得分:2)
您可以将其作为additional argument of save method传递:
serializer = UserProfileSerializer(data=request.data)
if serializer.is_valid():
user_profile = serializer.save(user=user)
从文档中
任何其他关键字参数都将包含在 调用.create()或.update()时validated_data参数。