代码之家  ›  专栏  ›  技术社区  ›  Rajani Karuturi

如何重写django模型中的get方法?

  •  6
  • Rajani Karuturi  · 技术社区  · 15 年前

    我想在将数据保存到数据库表之前对其进行编码,并在从数据库表读取数据之后对其进行解码。我想重写django get和save方法。

    类似于:

    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模型有save方法,我可以重写它并做我想做的事情。但是,它们似乎没有我可以重写的get方法。 我怎样才能做到这一点? 我希望在调用userdata.objects.all()或userdata.objects.get()或userdata.objects.filter()或任何其他可用的方法时对数据进行解码

    2 回复  |  直到 12 年前
        1
  •  5
  •   Benjamin Wohlwend    15 年前

    通常,通过重写 __init__ . 但自从 爱因斯坦 在django上,模型做的是各种各样的时髦业务,不建议覆盖它。相反,请注意 post_init 在那里发信号并解码:

    def my_decoder(instance, **kwargs):
        instance.decoded_stuff = decode_this(instance.encoded.stuff)
    
    models.signals.post_init.connect(my_decoder, UserData)
    
        2
  •  6
  •   Mike Pelley    12 年前

    尝试阅读有关编写自定义管理器的文档。记住,你不是打电话来的 Model 但是 Model.objects ,这是某种管理者。文件如下: https://docs.djangoproject.com/en/dev/topics/db/managers/