django rest framework - вернуть пользовательские данные для поля сериализатора модели - PullRequest
0 голосов
/ 05 января 2020

У меня есть следующая модель:

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, game_config (большой текст) и имя хоста

Как я могу вернуть определенные выше поля для сериализатора, хотя их нет в модели?

Я хотел бы установить некоторые пользовательские значения для каждого поля и вернуть их как JSON. Это возможно ? Фактически значения для определенных выше полей находятся в поле "game_config". Я хотел бы проанализировать эти значения и вернуть их, и я не хотел бы помещать их как отдельные поля в модели.

Разобрать game_config, получить пару: (field0, val0) ... (fieldN, valN) и в сериализаторе установите эти значения для полей сериализатора.

Пока я получаю только следующий ответ:

{
    "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"
}
...