Django REST框架模型序列化器未显示POST方法的所有字段吗?

时间:2019-11-06 18:14:10

标签: python django django-rest-framework

我正在尝试使用自定义create()方法来创建用户时保存我的用户个人资料,serializer非常适合GET方法,但是对于POST,它仅显示一个字段而不是所有字段。

我指定了fields = '__all__'属性,但仍然不起作用

获取:

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": []
    }

0 个答案:

没有答案