1
アプリケーションに固有の属性を持つユーザーモデルを拡張したいと考えています。この場合は、単にextA
とextB
に置き換えます。私はユーザーモデルを拡張するモデルを作っており、そのモデルのためのシンプルなシリアライザを作成しました。今では、余分なフィールドを持つユーザーを作成する方法がわかりません。私がされている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を作成するには:)
実行するのと、それを参照することができるはずください。このコマンドはシェルで取得しています: 'IntegrityError:UNIQUE constraint failed:app_userdetails.user_id'。あなたはそれを引き起こす可能性があることを知っていますか? – Warosaurus
あなたが提供しているIDが既に存在していることを意味します。 UserDetails.objects.get(id = id).delete()で削除するか、そこにないIDを指定してください – dmitryro