我想构建一个REST API端点,以便在与从abstractuser继承的Users模型具有一对一关系的模型上进行创建操作。
这是用户模型
class Users(AbstractUser):
is_user = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
这是我的管理员模型
class Admin(models.Model):
user = models.OneToOneField(Users, on_delete=models.CASCADE, primary_key=True, related_name='admin')
organization = models.CharField(max_length=255, blank=True)
def __str__(self):
return self.organization
这是我的序列化器
class UsersSerializers(serializers.ModelSerializer):
class Meta:
model = Users
fields = ('id', 'username', 'password')
write_only_fields = ('password',)
这是我的创建api视图
class UserCreateView(generics.ListCreateAPIView):
"""
This class defines the create behavior of our rest api.
get:
Return a list of all the existing users.
post:
Create a new user instance.
"""
queryset = Users.objects.all()
serializer_class = UsersSerializers
def perform_create(self, serializer):
"""Save the post data when creating a new Book."""
# serializer.save()
instance = serializer.save()
instance.set_password(instance.password)
instance.save()
我还希望能够与用户模型一起序列化管理模型及其字段的实例,我不知道该如何处理,但是我希望能够在用户模型字段旁边显示管理模型字段并与用户模型一起保存管理模型数据。
答案 0 :(得分:1)
像下面一样在serializer
中再增加一个字段
class UsersSerializers(serializers.ModelSerializer):
organization = serializers.CharField()
class Meta:
model = Users
fields = ('id', 'username', 'password', 'organization')
write_only_fields = ('password',)
现在,在perform_create
方法中,为Admin
创建一个对象
def perform_create(self, serializer):
"""Save the post data when creating a new Book."""
# serializer.save()
instance = serializer.save()
instance.set_password(instance.password)
instance.save()
organization = serializer.validated_data.get('organization')
Admin.objects.create(
user=instance,
organization=organization
)