Python 可写嵌套序列化程序用户和用户配置文件不';行不通
我正试图通过django rest framework和他的配置文件创建一个用户注册端点,结果表明我还没有为序列化程序创建显式的.create()方法。我错过了什么 这是我的模特Python 可写嵌套序列化程序用户和用户配置文件不';行不通,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正试图通过django rest framework和他的配置文件创建一个用户注册端点,结果表明我还没有为序列化程序创建显式的.create()方法。我错过了什么 这是我的模特 class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True) language = models.CharField(max_length=4
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True)
language = models.CharField(max_length=4, default='es')
def __unicode__(self):
return "%s - %s" % (self.user, self.language)
我的序列化程序.py
class ProfileCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = [
'language',
]
class UserSerializer(serializers.ModelSerializer):
profile = ProfileCreateSerializer()
class Meta:
model = User
fields = [
'username',
'profile',
]
def create (self, validated_data):
user = User.objects.create(username=validated_data['username'])
user.set_password(User.objects.make_random_password())
profile_data = validated_data.pop('profile')
Profile.objects.create(user=user, **profile_data)
user.save()
我的观点
class ProfileCreateAPIView(CreateAPIView):
queryset = User.objects.all()
model = Profile
serializer_class = UserSerializer
代码看起来正常,但缩进看起来错误:
.create()
方法需要是序列化程序上的一个方法,因此它应该缩进到与类Meta:
语句相同的级别
它应该是这样的(注意create()
方法上的缩进):
如果有帮助的话,请参阅中的更多示例。这真的是源代码的缩进吗?你能粘贴完整的回溯吗?
class UserSerializer(serializers.ModelSerializer):
profile = ProfileCreateSerializer()
class Meta:
model = User
fields = [ 'username', 'profile', ]
def create (self, validated_data):
user = User.objects.create(username=validated_data['username'])
user.set_password(User.objects.make_random_password())
profile_data = validated_data.pop('profile')
Profile.objects.create(user=user, **profile_data)
user.save()