私のmodels.py
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)
私serializers.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()
私のviews.pyです。 .create()
メソッドは、シリアライザ上のメソッドである必要があります。したがって、シリアライザと同じレベルに字下げする必要がありますclass Meta:
声明。
それはおそらく(create()
法上のインデントに注意してください)、次のようになりますことができます場合はDRF Docs (Saving Instances)で
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()
より多くの例、。
これは実際にあなたのソースコードの字下げですか?完全なトレースバックを貼ってもらえますか? – Linovia