微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django反序列化器,其字段设置为serialize = False

如何解决Django反序列化器,其字段设置为serialize = False

|| [编辑:使用django-1.1.1] 你好, 我正在使用django类,该类存储与对象图标相对应的blob(更精确地编码为b64的字符串)。 我将对象序列化为json以与不同的前端客户端进行通信。 我不想在json结果中显示纯图标blob(但将其作为图像显示在某个url下),因此我的icon字段定义如下:
icon = models.TextField(null=True,serialize=False)
但是当需要保存对象时,我会丢失图标,因为很明显,该值不是由传入的json字典设置的。 我想这样写一个hack:
class MyIconizedClass(models.Model):
    def __init__(self,*args,**kwargs):
        if self.pk is not None and self._icon is None:
            old_self = MyIconizedClass.object.get(pk=self.pk)
            self.icon = old.self.icon
对此并不十分满意,因为它每次都会在DB中查询,而且,如果图标实际上是None,它将无限期递归。 另一种方法是重写解串器。 有没有使用Django内部机制的解决方法?     

解决方法

尝试这个:
for deserialized_object in serializers.deserialize(\"json\",data):
    try:
        existing_object = MyIconizedClass.objects.get(pk=deserialized_object.pk)
        deserialized_object.icon = existing_object.icon
    except MyIconizedClass.DoesNotExist:
        pass     
    deserialized_object.save()
它还会查询数据库,但不会引起任何递归。     ,我更改了模型,以减少查询贪婪。
class MyIconizedClass(models.Model):
    ...
    ...


class IconClass(models.Model):
    obj = models.ForeignKey(MyIconizedClass)
    blob = models.TextField()
当使用某些URL入口点(例如)时,我仅按需查询IconClass表 GET / iconized / 42 / icon PUT /图标化/ 42 / icon 删除/ iconized / 42 / icon 访问对象本身时,我不需要了解图标(GET / iconized / 42)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。