Как может я переопределять получить метод в django Модели?

Я хочу сделать, кодируют данные прежде, чем сохранить его к таблице базы данных и декодируют его после чтения его от таблицы базы данных. Я хотел переопределить 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 () или любые другие такие доступные методы

6
задан Rajani Karuturi 22 March 2010 в 13:45
поделиться

2 ответа

Обычно это делается путем переопределения __ 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)
5
ответ дан 9 December 2019 в 22:32
поделиться

Попробуйте прочитать документацию о написании пользовательского менеджера. Помните, вы вызываете не Model , а Model.objects , который является своего рода менеджером. Вот документы: https://docs.djangoproject.com/en/dev/topics/db/managers/

6
ответ дан 9 December 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: