У меня есть модель 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
, как показано ЗДЕСЬ .