Я хочу сделать, кодируют данные прежде, чем сохранить его к таблице базы данных и декодируют его после чтения его от таблицы базы данных. Я хотел переопределить django, получают и сохраняют методы.
что-то как:
class UserData(models.Model):
userid = models.IntegerFields
data = models.charField(max_length=25)
def save(self, *args, **kwargs):
encode_data(self.data)
super(UserData, self).save(*args, **kwargs)
def get(self, *args, **kwargs):
data = super(UserData, self).get(*args, **kwargs)
return decode_data(data)
модели django имеют, сохраняют метод, и я могу переопределить его и сделать то, что я хочу. Но, у них, кажется, нет получить метода, который я могу переопределить. Как я могу достигнуть этого? Я хочу, чтобы данные декодировались при вызове UserData.objects.all () или UserData.objects.get () или UserData.objects.filter () или любые другие такие доступные методы
Обычно это делается путем переопределения __ init __
. Но поскольку __ init __
в Django Models выполняет всякие забавные дела, не рекомендуется отменять его. Вместо этого прислушайтесь к сигналу post_init
и сделайте там свое декодирование:
def my_decoder(instance, **kwargs):
instance.decoded_stuff = decode_this(instance.encoded.stuff)
models.signals.post_init.connect(my_decoder, UserData)
Попробуйте прочитать документацию о написании пользовательского менеджера. Помните, вы вызываете не Model
, а Model.objects
, который является своего рода менеджером. Вот документы:
https://docs.djangoproject.com/en/dev/topics/db/managers/