Mik*_*son 2 django django-serializer django-rest-framework
serializers.py
from django.contrib.auth.models import User
from engine.models import Game
from rest_framework import serializers
class GameSerializer(serializers.ModelSerializer):
class Meta:
model = Game
fields = (
'game_name',
'level',
'game_type',
'creator',
'id',
)
Run Code Online (Sandbox Code Playgroud)
我想creator.username为creator刚刚返回用户对象,它是创作者的ID的整数。如何获取creator.username而不是creator?
尝试这个。希望该creator字段是只读的,并从如下视图分配request.user
from django.contrib.auth.models import User
from engine.models import Game
from rest_framework import serializers
class GameSerializer(serializers.ModelSerializer):
creator = serializers.CharField(read_only=True, source='creator.username')
class Meta:
model = Game
fields = (
'game_name',
'level',
'game_type',
'creator',
'id',
)
Run Code Online (Sandbox Code Playgroud)
注意: 这将使该creator字段为只读。如果您打算从序列化程序中添加它,请使用单独的名称作为creator.user名称。就像下面的例子
class GameSerializer(serializers.ModelSerializer):
creator_name = serializers.CharField(read_only=True, source='creator.username')
class Meta:
model = Game
fields = (
'game_name',
'level',
'game_type',
'creator',
'creator_name',
'id',
)
Run Code Online (Sandbox Code Playgroud)
您可以覆盖串行方法字段如下得到creator.username的creator如下:
class GameSerializer(serializers.ModelSerializer):
creator = serializers.SerializerMethodField(read_only=True)
def get_creator(self, obj):
# obj is model instance
return obj.creator.username
class Meta:
model = Game
fields = (
'game_name',
'level',
'game_type',
'creator',
'id',
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3223 次 |
| 最近记录: |