Django Rest Framework,如何获取外键值并将其添加到我的序列化程序或视图以创建新对象?
Django Rest Framework, How do I grab a foreign key value and add it to my serializer or view to create a new object?
models.py
用户模型是从 django 导入 auth 用户模型
class Profile(models.Model):
username_id = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
phone_number = PhoneNumberField(blank=True, null=True)
image_url = models.ImageField(blank=True, null=True)
address = models.CharField(max_length=30)
update = models.DateTimeField('Updated at', default=timezone.now())
def __str__(self):
return self.username_id.__str__()
views.py
@api_view(['POST'])
def profile_create(request, pk):
request
serializer = ProfileCreateSerializer(data=request.data)
# print(serializer)
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors)
return Response(serializer.data)
serializers.py
class ProfileCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['phone_number', 'image_url', 'address']
我想为用户创建一个新的配置文件,我不知道在哪里或如何将外键值传递给序列化程序或视图以创建新的配置文件
错误
django.db.utils.IntegrityError: null value in column "username_id_id" of relation "users_pr
ofile" violates not-null constraint
DETAIL: Failing row contains (, , HELLLfwfwefwf, 2021-09-02 20:08:58.53219+00, null).
假设配置文件是针对当前登录用户的,您可以在 save()
:
中执行类似的操作
serializer.save(username_id=request.user)
这会将 username_id
外键设置为当前登录的用户。
models.py
用户模型是从 django 导入 auth 用户模型
class Profile(models.Model):
username_id = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
phone_number = PhoneNumberField(blank=True, null=True)
image_url = models.ImageField(blank=True, null=True)
address = models.CharField(max_length=30)
update = models.DateTimeField('Updated at', default=timezone.now())
def __str__(self):
return self.username_id.__str__()
views.py
@api_view(['POST'])
def profile_create(request, pk):
request
serializer = ProfileCreateSerializer(data=request.data)
# print(serializer)
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors)
return Response(serializer.data)
serializers.py
class ProfileCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['phone_number', 'image_url', 'address']
我想为用户创建一个新的配置文件,我不知道在哪里或如何将外键值传递给序列化程序或视图以创建新的配置文件
错误
django.db.utils.IntegrityError: null value in column "username_id_id" of relation "users_pr
ofile" violates not-null constraint
DETAIL: Failing row contains (, , HELLLfwfwefwf, 2021-09-02 20:08:58.53219+00, null).
假设配置文件是针对当前登录用户的,您可以在 save()
:
serializer.save(username_id=request.user)
这会将 username_id
外键设置为当前登录的用户。