python - Create OneToOne field user object in Django serialization
问题描述
I am trying to create the User
object using my Staff
class. My staff model looks like following,
class Staff(models.Model):
organization = models.ForeignKey(
Organization, related_name='staff_organization', on_delete=models.CASCADE, blank=True)
user = models.OneToOneField(
User, on_delete=models.CASCADE, blank=True)
phone = models.CharField(max_length=15, blank=True)
def __str__(self):
return self.user.username
My serializer class is here,
# create staff serializer
class StaffSerializer(serializers.ModelSerializer):
class Meta:
model = Staff
fields = "__all__"
def create(self, validated_data):
username = validated_data.pop('username')
email = validated_data.pop('email')
password = validated_data.pop('password')
user_instance, created = User.objects.get_or_create(
username=username, email=email)
if not created:
user_instance.set_password(password)
staff_instance = Staff.objects.create(
**validate_data, user=user_instance)
return staff_instance
Viewset class,
class StaffViewSet(viewsets.ModelViewSet):
serializer_class = StaffSerializer
queryset = Staff.objects.all()
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
staff = serializer.save(organization=self.request.user.staff.organization)
return Response(serializer.data)
I tried the post request as below,
{"username":"tekson", "email":"tekson@gmail.com", "password":"admin"}
But it shows the error
{
"user": [
"This field is required."
]
}
I don't know how to create the user object from the staff. Please help me to figure out this error.
解决方案
Make sure to call user_instance.save()
after set_password()
.
推荐阅读
- apache - Apache 错误 AH00112 - 文档根目录 /usr/Users 不存在(在 macOS Mojave 上)
- python - 使用python从excel单元格中删除换行符
- ios - 在 iOS 中处理和持久化 JSON 数据的选项
- c++ - recv() 获取损坏的数据
- java - 当 Open JDK 存在时,为什么要选择 Oracle JDK?
- python - 创建正则表达式模式以提取浮点数和整数
- excel - 遍历列以运行回归
- sql - ssis中基于日期的条件
- python - 检查数据框列中的所有值是否相同
- python - 如何在丢失之前两次运行keras模型?