【发布时间】:2020-07-12 05:57:27
【问题描述】:
我正在尝试使用我的 Staff 类创建 User 对象。我的员工模型如下所示,
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
我的序列化程序类在这里,
# 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
视图集类,
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)
我尝试了以下发布请求,
{"username":"tekson", "email":"tekson@gmail.com", "password":"admin"}
但它显示错误
{
"user": [
"This field is required."
]
}
我不知道如何从员工创建用户对象。请帮我找出这个错误。
【问题讨论】:
-
员工序列化程序期望“用户”和“电话”作为输入 json 中的键。此外,由于您在输入中发送电子邮件和密码,因此您需要为这些定义序列化器字段并包含在字段部分中
-
你能帮我定义序列化器字段吗
标签: python django django-rest-framework