django rest framework-返回模型序列化程序字段的自定义数据
我有以下型号:django rest framework-返回模型序列化程序字段的自定义数据,rest,django-rest-framework,Rest,Django Rest Framework,我有以下型号: class ServerSimpleConfigSerializer(mixins.GetCSConfigMixin, serializers.ModelSerializer): mp_autoteambalance = serializers.BooleanField(label='Auto Team Balance', default=True, required=False) mp_friendlyfire = serializers.BooleanFiel
class ServerSimpleConfigSerializer(mixins.GetCSConfigMixin, serializers.ModelSerializer):
mp_autoteambalance = serializers.BooleanField(label='Auto Team Balance', default=True, required=False)
mp_friendlyfire = serializers.BooleanField(label='Friendly Fire', default=False, required=False)
mp_autokick = serializers.BooleanField(label='Auto team-killer banning and idle client kicking', default=True, required=False)
# hostname = serializers.CharField(label='Hostname', max_length=75, required=True)
rcon_password = serializers.CharField(label='RCON Password', max_length=75, required=True)
sv_password = serializers.CharField(label='Server Password', max_length=75, required=False)
mp_startmoney = serializers.IntegerField(label='Start Money', required=False, validators=[MinValueValidator(800), MaxValueValidator(16000)])
mp_roundtime = serializers.FloatField(label='Round Time', required=False)
mp_timelimit = serializers.IntegerField(label='Map Time Limit', required=False)
fpath = os.path.join(settings.ROOT_DIR, "cs16/tmp/server.json")
class Meta:
model = CS16Server
fields = ('name', 'game_config', 'mp_autoteambalance', 'mp_friendlyfire',
'mp_autokick', 'hostname', 'rcon_password', 'sv_password',
'mp_startmoney', 'mp_roundtime', 'mp_timelimit')
read_only_fields = ('name', 'game_config',)
该模型具有以下字段:
- 名称、游戏配置(大文本)和主机名
{
"name": "Chronos",
"game_config": "hostname \"A New Gameservers.com Server is Born\"\nrcon_password \"\"\nsv_password \"1410271\"\nsv_contact email@domain.com\nsv_region 255\nsv_filterban 1\nsv_logbans 0\nsv_unlag 1\nmp_startmoney 800\nmp_chattime 30\nmp_footsteps 1\nsv_footsteps 1\nmp_logdetail 0\nmp_logmessages 0\nmp_timelimit 30\nmp_autokick 1\nmp_autoteambalance 1\nmp_flashlight 0\nmp_forcerespawn 0\nmp_forcechasecam 0\nmp_freezetime 0\nmp_friendlyfire 0\nmp_hostagepenalty 0\nmp_limitteams 0\nmp_roundtime 5\nmp_tkpunish 1\nsv_voiceenable 1\nsv_voicecodec voice_speex\nsv_voicequality 3\nsv_alltalk 0\nsv_restartround 1\nsv_maxspeed 320\nsv_proxies 1\nallow_spectators 1\nsv_allowupload 1\npausable 0\ndecalfrequency 40\nmp_falldamage 0\nsv_cheats 0\nsv_lan 0\nsv_maxrate 20000\nsv_minrate 4000\nexec listip.cfg",
"mp_autoteambalance": true,
"mp_friendlyfire": false,
"mp_autokick": true,
"hostname": "none"
}
您想使用
ServerSimpleConfigSerializer
从后端->api解析数据,还是想使用此序列化程序保存数据?如果你只想解析数据->api,使用自定义的任何你想要的,你可以尝试序列化程序。SerializerMethodField
我想用它来保存数据,但我还需要创建一些字段并根据“game\u config”字段返回它们。我可以使用SerializerMethodField,但我也希望能够写入数据。因此,我需要一种方法来计算数据以返回它,但我还需要使用该字段来写入数据。SerializerMethodField是只读的。基本上,我想要的是能够返回这些字段的“计算数据”,但也有可能将数据写入这些字段&然后每个字段的每个值将实际放入“game_config”字段。因此,序列化程序的字段不会写入模型,但这些值将被放入模型中存在的“game_config”字段中。您可以创建一个serializers.SerializerMethodField
,用于将数据显示到api,以及一个普通字段映射数据库,用于保存模型。类似于game\u config\u data
是返回api的SerializerMethodField
,而game\u config
是save
后端的normal