Как построить Rest Api для пользовательской модели с отношениями один к одному с пользовательской моделью django - PullRequest
0 голосов
/ 17 июня 2019

Я хочу построить конечную точку api rest для операции создания на модели, которая имеет отношение один к одному с моделью Users, которая наследуется от abstractuser.

Это модель пользователей

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()

Я хочу также иметь возможность сериализации экземпляра модели администратора и его поля вместе с моделью пользователей, я не знаю, как это сделать, но я хочу иметь возможность отображать поля модели администратора вместе с полем модели пользователей и сохраните данные модели Admin вместе с моделью Users.

1 Ответ

1 голос
/ 18 июня 2019

Возьмите еще одно поле в 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
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...