Вложенные сериализаторы DRF возвращают пустой словарь
У меня есть два модала designation и UserModal
class DesignationModal(models.Model):
designation=models.CharField(max_length=100)
def __str__(self):
return self.designation
class UserModal(AbstractUser):
username=models.CharField(max_length=300,unique=True)
password=models.CharField(max_length=300)
email=models.EmailField(max_length=300)
designation=models.ForeignKey(DesignationModal,on_delete=models.CASCADE,
related_name="desig",null=True)
def __str__(self):
return self.username
у каждого пользователя есть только одно обозначение. Для этого я написал сериализатор.
class DesignationSerializer(serializers.Serializer):
class Meta:
model=DesignationModal
fields=['designation','id']
class UserSerializer(serializers.ModelSerializer):
designation=DesignationSerializer(read_only=True,many=False)
class Meta:
model=UserModal
fields=['id', 'username','designation']
Я получаю JSON-ответ следующего содержания
{
"status": true,
"data": [
{
"id": 3,
"username": "akhil",
"designation": {}
}
]
}
нет значений в словаре, когда я переписывал код сериализатора следующим образом.
class UserSerializer(serializers.ModelSerializer):
designation=serializers.StringRelatedField()
class Meta:
model=UserModal
fields=['id', 'username','designation']
я получаю значения обозначений в виде строки
{
"status": true,
"data": [
{
"id": 3,
"username": "akhil",
"designation": "agent"
}
]
}
Почему я не получаю значения предыдущим способом?
При использовании опции depth будут получены вложенные значения.
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = UserModal
fields = ['username', 'email', 'designation', ]
depth = 1
Неправильное наследование для DesignationSerializer(serializers.Serializer) вам нужно изменить его таким образом
class DesignationSerializer(serializers.ModelSerializer):
class Meta:
model=DesignationModal
fields=['designation','id']