我正在学习Django Rest Framework,并成功创建了一些API。现在,我正在尝试序列化一个关系,但是我不知道它是如何工作的。这是我的代码:
class Countries(models.Model):
country = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'countries'
class Users(models.Model):
name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
country = models.ForeignKey(Countries, models.DO_NOTHING)
date = models.DateTimeField()
class Meta:
managed = False
db_table = 'users'
在views.py中
def get(self,request):
print(UsersSerializer)
users = Users.objects.all()
serializer = UsersSerializer(users,many = True)
return Response(serializer.data)
序列化器:
class UsersSerializer(serializers.ModelSerializer):
class Meta:
model = Users
fields = '__all__'
当我运行API时,我会得到
[
{
"id": 3,
"name": "dsadasd",
"email": "[email protected]",
"date": "2020-05-12T12:15:24Z",
"country": 1
}
]
在国家/地区字段中,我要输入国家/地区id
,并且我希望在此输入国家/地区名称...
您可以使用source
字段参数来检索source
而不是country
:
...或可以使用点号来遍历属性,例如
id
。当用点号符号序列化字段时,如果在属性遍历期间不存在任何对象或该对象为空,则可能需要提供默认值。
因此您的序列化器应如下所示:
EmailField(source='user.email')
您需要更改您的class UsersSerializer(serializers.ModelSerializer):
country = serializers.CharField(source='country.country', default='')
class Meta:
model = Users
fields = ('id', 'name', 'email', 'date', 'country')
# You may use fields='__all__' but I find the explicit declaration
# more flexible.
以返回对ID的国家/地区名称的误读。
UsersSerializer
进一步阅读class UsersSerializer(serializers.ModelSerializer):
country = serializers.SerializerMethodField() # add this line
class Meta:
model = Users
fields = '__all__'
def get_country(self, instance):
return instance.country.country # return country name
。