В Django REST Framework Serializer Model не отображаются все поля для метода POST? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать собственный метод create() для сохранения моего профиля пользователя при создании пользователя, serializer отлично работает для метода GET, но для POST он показывает только одно поле вместо всех полей.

Я указал свойство fields = '__all__', но все еще не работает

GET:

get

Ответ JSON:

[
  {
    "job_title": {
      "id": 1,
      "name": "Desarrollador"
    },
    "birthdate": "2019-11-06",
    "roles": [
      {
        "id": 1,
        "name": "Administrador",
        "description": "Administrador del sistema",
        "key": "ADMIN"
      }
    ]
  }
]

POST:

post

Ожидаемый JSON:

[
  {
    "birthdate": "2019-11-06",
  }
]

Сериализаторы:

class UserProfileSerializer(serializers.ModelSerializer):
        class Meta:
            model = UserProfile
            fields = '__all__'
            depth = 1

class UserSerializer(serializers.ModelSerializer):
    user_profile = UserProfileSerializer(read_only=False, many=False)

    class Meta:
        model = User
        fields = '__all__'
        depth = 1

    def create(self, validated_data):
        profile_data = validated_data.pop('user_profile')
        user = User.objects.create(**validated_data)
        UserProfile.objects.create(user=user, **profile_data)
        return user

views.py

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    profile = serializers.PrimaryKeyRelatedField(many=False, queryset=UserProfile.objects.all())
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserProfileList(generics.ListCreateAPIView):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='user_profile', on_delete=models.CASCADE)
    birthdate = models.DateField(default=datetime.date.today)
    job_title = models.ForeignKey(JobTitle, related_name='job_title', on_delete=models.CASCADE)
    roles = models.ManyToManyField(Role)

    def createProfile(sender, **kwargs):
         if kwargs['created']:
            user_profile = UserProfile.objects.created(user=kwargs['instance'])

         post_save.connect(createProfile, sender=User)

    def __str__(self):
        return self.user.username

Мне нужно, чтобы метод POST также требовал полного JSON, такого же, как и ответ GET JSON, для завершения метода create. Нужно это для метода POST:

{
        "id": 1,
        "user_profile": {
            "job_title": {
                "id": 1,
                "name": "Desarrollador"
            },
            "birthdate": "2019-11-06",
            "roles": [
                {
                    "id": 1,
                    "name": "Administrador",
                    "description": "Administrador del sistema",
                    "key": "ADMIN"
                }
            ]
        },
        "password": "pbkdf2_sha256$150000$0XdmQpeiPtVl$rQh2MEYV+IO5Y4gm2o1md2cVzgn/mL95r6m1TvRmG3g=",
        "last_login": "2019-11-06T00:34:25-06:00",
        "is_superuser": true,
        "username": "aruiz",
        "first_name": "",
        "last_name": "",
        "email": "correo@correo.com",
        "is_staff": true,
        "is_active": true,
        "date_joined": "2019-11-05T11:37:49-06:00",
        "groups": [],
        "user_permissions": []
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...