Получение 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)
Я не пробовал этот код. Поэтому, возможно, потребуются небольшие изменения.