2016-06-19 20 views
1

アプリケーションに固有の属性を持つユーザーモデルを拡張したいと考えています。この場合は、単にextAextBに置き換えます。私はユーザーモデルを拡張するモデルを作っており、そのモデルのためのシンプルなシリアライザを作成しました。今では、余分なフィールドを持つユーザーを作成する方法がわかりません。私がされているDjango Rest Frameworkユーザーモデルの拡張方法、ユーザーの作成方法

class UserDetailsSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'email', 'extA', 'extB') 

views.py

class UserDetailsView(APIView): 

    def get(self, request, id, format=None): 
     data = User.objects.get(id) 
     serializer_class = UserDetailsSerializer 
     return Response(serializer_class.data) 

models.py

class UserDetails(models.Model): 

    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    extA = models.IntegerField(null=True) 
    extB = models.IntegerField(null=True) 

@receiver(post_save, sender=User) 
def handle_user_save(sender, instance, created, **kwargs): 
    if created: 
     UserDetails.objects.create(user=instance) 

serializers.pyシェルを介してユーザーを作成します。このように: user = User.objects.create_user('John', '[email protected]', 'pass')これは本当にうまく動作しますが、UserDetailsViewオブジェクトを作成して保存する方法がわかりません。

user = User.objects.get(id=id) 
UserDetails.objects.create(id=user.id,user=user,extA=your_val_1,extB=your_val_2) 

あなたのビューでUserDetailsを作成するには:)

答えて

2

を助け、そしてあなたがuser.userdetails.extA、user.userdetails.extB

+0

実行するのと、それを参照することができるはずください。このコマンドはシェルで取得しています: 'IntegrityError:UNIQUE constraint failed:app_userdetails.user_id'。あなたはそれを引き起こす可能性があることを知っていますか? – Warosaurus

+0

あなたが提供しているIDが既に存在していることを意味します。 UserDetails.objects.get(id = id).delete()で削除するか、そこにないIDを指定してください – dmitryro

関連する問題