限制Ajang XML应用程序的Django查询结果

时间:2010-10-22 06:24:37

标签: django

这是我的模特:

class Members(models.Model):
    firstname         = models.CharField(max_length=30)
    lastname          = models.CharField(max_length=30)
    gender            = models.CharField(max_length=1)
    email             = models.EmailField()
    password          = models.CharField(max_length=30)
    country_code      = models.CharField(max_length=4, choices=COUNTRY_CHOICES)
    zip               = models.CharField(max_length=10)
    will_share        = models.IntegerField()
    will_chat         = models.IntegerField()
    priv_level        = models.IntegerField()
    email_format      = models.CharField(max_length=4, choices=EMAIL_CHOICES)
    created           = models.DateTimeField(auto_now_add=True)
    modified          = models.DateTimeField(auto_now=True)
    last_login        = models.DateTimeField(auto_now=True)
    active            = models.BooleanField()

当我按如下方式进行查询时:

Members.objects.all()

如何限制返回的字段。我只想要firstname,lastname和last_login,以便有效地创建一个类似的查询:

SELECT firstname, lastname, last_login FROM members

有很多成员,我需要向浏览器发送大量XML数据,并且不希望返回所有字段,因为它会过多地压缩数据。我检查了所有文档,但无法查看要使用的选项。

我是否有一种简单的方法可以将我的有限字段数据集转换为XML以返回浏览器以在ajax中使用?

由于

3 个答案:

答案 0 :(得分:1)

  1. QuerySet.values()将允许您指定所需的字段,但查询将不再返回模型实例。

  2. Serialization。但是,当然如果您使用以前的方法,那么您可能无法以相同的方式序列化它。请考虑使用JSON代替。

答案 1 :(得分:1)

您可以在查询集上设置.only(fields).defer(fields)来限制选择本身。如果您访问它们,这将返回将执行单个选择以填充缺失字段的模型。

但无法回答XML序列化部分。

答案 2 :(得分:0)

我最后在http://docs.djangoproject.com/en/dev/topics/serialization/

找到了答案

可以限制实际序列化中返回的字段!

来自django.core导入序列化程序 data = serializers.serialize('xml',SomeModel.objects.all(),fields =('name','size'))