0
私はDRFを使用してユーザーと彼のプロファイルを作成しようとしていますが、正しい方法はありません。ユーザーとプロファイルの作成をシリアル化するdjango rest framework
は、ここに私のmodels.py
from __future__ import unicode_literals
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from django.db import models
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
from rest_framework import serializers
from models import Profile
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
class ProfileCreateSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
class Meta:
model = Profile
fields = [
'username',
'language',
]
def create (self, validated_data):
user = get_user_model().objects.create(username=validated_data['username'])
user.set_password(User.objects.make_random_password())
user.save()
profile = Profile.objects.create(user = user)
return profile
私のviews.py
from rest_framework.response import Response
from rest_framework.generics import CreateAPIView
from serializers import ProfileCreateSerializer
from models import Profile
class ProfileCreateAPIView(CreateAPIView):
model = Profile
serializer_class = ProfileCreateSerializer
私urls.pyです
from django.conf.urls import patterns, include, url
import views
from django.contrib import admin
urlpatterns = [
url(r'^', views.ProfileCreateAPIView.as_view(), name='crear perfil'),
]
私はそれが私にこのエラーを示して作成しようとします。
Cannot assign "{u'username': u'test'}": "Profile.user" must be a "User" instance.
私は管理パネルを介してユーザと自分のプロファイルを作成する場合は、私にすべてのエラーが表示されません。
私のadmin.py:
from django.contrib import admin
from models import Profile
from django.contrib.auth.admin import UserAdmin
class ProfileInline(admin.StackedInline):
model = Profile
can_delete = False
verbose_name_plural = 'Perfil'
fk_name = 'user'
class UserAdmin(UserAdmin):
inlines = (ProfileInline,)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
私はジャンゴ1.9.1を使用して、あなたが最初の場所でUserSerializerが必要なのはなぜ3.3.2
: Field.to_internal_valueを()を実装する必要があります。 –
上記のように、serializers.fieldをCharFieldに変更します。 '' 'username = serializers.CharField(source = 'user.username')' '' –
が完了しました。これでキーエラー 'username'というエラーが表示されます –