在序列化器中获取字段的属性(django rest 框架)
Getting attribute of field in 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',
)
我想得到 creator.username
作为 creator
只是 returns 作为创建者的用户对象的 ID 的整数。我怎样才能得到 creator.username 而不是创作者?
试试这个。希望 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',
)
注意: 这将使 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',
)
您可以如下重写序列化程序方法字段以获取 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',
)
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',
)
我想得到 creator.username
作为 creator
只是 returns 作为创建者的用户对象的 ID 的整数。我怎样才能得到 creator.username 而不是创作者?
试试这个。希望 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',
)
注意: 这将使 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',
)
您可以如下重写序列化程序方法字段以获取 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',
)