簡體   English   中英

如何與Django用戶模型建立一對一關系的自定義模型的Rest Api

[英]How to build Rest Api for custom model with one to one relationship with django user model

我想建立一個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()

我還希望能夠與用戶模型一起序列化管理模型及其字段的實例,我不知道該如何做,但是我希望能夠在用戶模型字段旁邊顯示管理模型字段並保存管理模型數據以及用戶模型。

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
        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM