[英]Django Rest Framework how to serialize a relational Model?
我正在學習 Django Rest 框架並成功創建了一些 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": "dasd@gmail.com",
"date": "2020-05-12T12:15:24Z",
"country": 1
}
]
在國家/地區字段中,我正在獲取國家/地區id
,並且我期待這里的國家/地區名稱......
您需要更改您的UsersSerializer
以返回國家/地區名稱 insread 的 id。
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
進一步閱讀SerializerMethodField 。
您可以使用source
字段參數來檢索country
而不是id
:
...或者可以使用點符號來遍歷屬性,例如
EmailField(source='user.email')
。 使用點分符號序列化字段時,如果在屬性遍歷期間任何 object 不存在或為空,則可能需要提供默認值。
因此,您的序列化程序應如下所示:
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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.