Django-REST-Framework:ForeignKey实例未传递到validated_data [英] Django-REST-Framework: ForeignKey instance is not passed to validated_data
问题描述
我正在尝试创建一个覆盖 create
方法的实例,并在数据中传递 ForeignKey
实例,但是该字段未包含在 validated_data
传递给 create
方法.如何将其传递给 create
??
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. How can I pass that to 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
中.官方文档建议为 User
模型创建另一个序列化器并使用它,但是还有其他方法可以不创建该序列化器吗?
Even though I'm passing User
object to serializer it's not included in the 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 ??
推荐答案
您可以将其作为保存方法的附加参数:
serializer = UserProfileSerializer(data=request.data)
if serializer.is_valid():
user_profile = serializer.save(user=user)
从文档中
任何其他关键字参数都将包含在调用.create()或.update()时validated_data参数.
Any additional keyword arguments will be included in the validated_data argument when .create() or .update() are called.
这篇关于Django-REST-Framework:ForeignKey实例未传递到validated_data的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!