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

发布于 2024-10-10 06:08:42 字数 1228 浏览 1 评论 0原文

我有一个小问题,那就是如何使用 defer 序列化 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)

它总是遵循用户和本地的自然键,我需要自然由于本地字段,此查询的键。但我不需要现场用户。

i have i little problem, and that is how can serialize a django query with defer ?
I have this model :

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))

my query is this :

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

it works fine i think (how can i check if the query has realy defer the field user ? ) but when i do:

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

it always folow the natural keys for user and local, i need natural keys for this query because of the fields local. But i do not need the field user.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只是一片海 2024-10-17 06:08:42

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

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

参考:Django 文档

To serialize a subset of your models fields, you need to specify the fields argument to the serializers.serialize()

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

Ref: Django Docs

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文