[编辑:使用django-1.1.1 ]
您好,
我正在使用django类来存储对应于该对象图标的blob(更精确地编码的字符串b64)。
我将对象序列化为json以与不同的前端客户端进行通信。
我不想在json结果中公开纯图标blob(但是在某个url下将其作为图像提供),因此我的图标字段定义如下:
icon = models.TextField(null=True, serialize=False)
但是当保存我的对象的时候,我丢失了我的图标,因为显然,该值不是由传入的json dictionnary设置的。
我想写一个像这样的黑客:
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中查询,另外,如果图标实际上是无,它将无限期地递归。
另一种方法是重写反序列化器。
是否有使用django内部机制的解决方法?
答案 0 :(得分:1)
试试这个:
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()
它还会查询数据库,但不会导致任何递归。
答案 1 :(得分:0)
我改变了我的模型,以减少查询贪婪。
class MyIconizedClass(models.Model):
...
...
class IconClass(models.Model):
obj = models.ForeignKey(MyIconizedClass)
blob = models.TextField()
在处理某些url入口点(例如
)时,我只按需查询IconClass表访问对象本身时,我不需要知道图标(GET / iconized / 42)。