Редактирование маринованного BinaryField в админке Django - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть модель Parameter для хранения типов параметров (около 20-30 возможных parameter_type с) и их соответствующих значений.Примерные значения, которые я хочу сохранить в этой таблице:

╔═════════════════╦═══════════════════════╗
║ parameter_type  ║ value                 ║
╠═════════════════╬═══════════════════════╣
║ "min"           ║ 12                    ║
╠═════════════════╬═══════════════════════╣
║ "initial_value" ║ -2                    ║
╠═════════════════╬═══════════════════════╣
║ "prior_dist"    ║ "normal"              ║
╠═════════════════╬═══════════════════════╣
║ "prior_par"     ║ {"mu": 0, "sd": 1}    ║
╠═════════════════╬═══════════════════════╣
║ "start_values"  ║ [-2, 0, 2]            ║
╠═════════════════╬═══════════════════════╣
║ "initial_dist"  ║ "uniform"             ║
╠═════════════════╬═══════════════════════╣
║ "initial_par"   ║ {"min": -3, "max": 3} ║
╚═════════════════╩═══════════════════════╝

Чтобы выполнить это, я следовал совету из ЗДЕСЬ и использовал pickle.

import pickle
from django.db import models


class Parameter(models.Model):
    model = models.ForeignKey(MyModelClass,
                              on_delete=models.CASCADE,
                              related_name='parameters')
    parameter_type = models.CharField(max_length=30)

    _value = models.BinaryField()

    def set_data(self, data):
        self._value = pickle.dumps(data)

    def get_data(self):
        return pickle.loads(self._value)

    value = property(get_data, set_data)


class MyModelClass(models.Model):
    method = models.CharField(max_length=30)

Это позволило мне хранить данные так, как я планировал.но я не могу использовать django.admin (возможно, поскольку BinaryField '... не может быть включен в ModelForm' ).Теперь я могу добавлять значения только с помощью оболочки Django.Есть ли способ настроить администратора, чтобы разрешить ввод данных в это поле value?

Я не хочу существенно менять структуру данных.Но, учитывая ограниченное количество опций parameter_type, и структура значений будет одинаковой для каждого parameter_type, я потенциально могу написать собственную форму для каждой пары тип-значение (пока не знаю, как это сделать).Также есть возможность изменить BinaryField на TextField, как показано ЗДЕСЬ .

...