我有两个模态指定和 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"
}
]
}
为什么我没有以以前的方式获得值?
使用 深度 选项将获取嵌套值。
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']
文档中没有明确说明这一点,但嵌套的
ModelSerializer
字段需要与模型中相应 related_name
字段的 ForeignKey
相匹配。
在这种情况下
related_name="designation"
应该按预期工作。