Получение null всех полей ответа, кроме id, в фреймворке django rest

Привет всем я создаю api для с вложенной сериализацией, но получаю нулевой ответ каждого поля, кроме id. поля, кроме id, пожалуйста, помогите мне.

models.py

class Name(BaseModel):
    first_name=models.CharField(max_length=255,null=True, blank=True)
    middle_name=models.CharField(max_length=255,null=True, blank=True)
    last_name=models.CharField(max_length=255,null=True, blank=True)

class Role(BaseModel):
    role=models.CharField(max_length=255,null=True, blank=True)
    name=models.ForeignKey(Name, models.CASCADE, null=True, blank=True)

serializer.py

class RoleSerializer(serializer.ModelSerializer):
    class Meta:
        model = Role
        fields= "__all__"


class NameSerializer(serializers.ModelSerializer):
    role=RoleSerializer()
    class Meta:
        model = Name
        fields = ['id','first_name','last_name','middle_name','role']

views.py

class Profile(viewsets.ModelViewSet):
    queryset = Role.objects.all()
    serializer_class = NameSerializer

api ответ

{
    "id": 1,
    "first_name": null,
    "middle_name": null,
    "last_name": null,               
    "role": {
                    "id": 1,
                    "name": null
                 }
 }

Я не очень уверен, но попробуйте что-то вроде этого:

class Profile(viewsets.ModelViewSet):
    queryset = Name.objects.all().prefetch_related('role')
    serializer_class = NameSerializer

class NameSerializer(Serializer):
    role = SerializerMethodField()

    class Meta:
    model = Name
    fields = ['id','first_name','last_name','middle_name','role']

    def get_role(self, obj):
        return obj.role.all().values_list('role', flat=True) # or Role.objects.filter(name=obj.id).values_list('role', flat=True)

Если вам нужны все значения в Roll, то вы можете изменить метод get_role на:

    def get_role(self, obj):
        return RoleSerializer(obj.role.all(), many=True)# or RoleSerializer(Role.objects.filter(name=obj.id), many=True)

Я не пробовал этот код. Поэтому, возможно, потребуются небольшие изменения.

Вернуться на верх