使用包含defer的查询集在django中序列化

时间:2011-01-04 11:35:04

标签: django django-models django-queryset

我有一点问题,那就是如何用延迟序列化django查询? 我有这个模型:

class Evento(models.Model):
    nome=models.CharField(max_length=100)
    descricao=models.CharField(max_length=200,null=True)
    data_inicio= models.DateTimeField()
    data_fim= models.DateTimeField()
    preco=models.DecimalField(max_digits=6,decimal_places=2)
    consumiveis= models.CharField(max_length=5)
    dress_code= models.CharField(max_length=6)
    guest_list=models.CharField(max_length=15)

    local = models.ForeignKey(Local)
    user= models.ManyToManyField(User,null=True,blank=True)

    def __unicode__(self):
        return unicode('%s %s'%(self.nome,self.descricao))

我的疑问是:

eventos_totais = Evento.objects.defer("user").filter(data_inicio__gte=default_inicio,
                                data_fim__lte=default_fim)

它运行正常我认为(我如何检查查询是否真的推迟了现场用户?)但是当我这样做时:

json_serializer = serializers.get_serializer("json")()
eventos_totais = json_serializer.serialize(eventos_totais,
                                           ensure_ascii=False,
                                           use_natural_keys=True)

它始终包含用户和本地的自然键,因为字段是本地的,我需要此查询的自然键。但我不需要现场用户。

1 个答案:

答案 0 :(得分:1)

要序列化模型字段的子集,您需要为serializers.serialize()

指定 fields 参数
from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))

参考:Django Docs