gpt4 book ai didi

python - 无法访问 annotate() 中的 to_attr 属性

转载 作者:行者123 更新时间:2023-12-05 06:32:26 24 4
gpt4 key购买 nike

我有以下代码:

queue = Queue_item.objects.prefetch_related(Prefetch('queue_item_id', 
queryset=Platform.objects.all().order_by('-time'), to_attr='platforms'))
queue = queue.annotate(first_time=Min('platforms__time')).order_by('first_time')

当我运行它时,我收到一条错误消息,指出在 queue.annotate 中,它找不到平台,即使我之前在 prefetch_related 中正确设置了它也是如此。

我错过了什么?

[编辑]

#models.py

import django
from django.db import models

class Queue_item(models.Model):
caption = models.TextField(max_length=1000)
path_to_picture = models.CharField(max_length=255)

def create(self):
self.save()

def __str__(self):
return self.caption.split(' ')[0]

class Platform(models.Model):

queue_item_id = models.ForeignKey(
Queue_item,
on_delete=models.CASCADE
)

time = models.DateTimeField(default=django.utils.timezone.now)

INSTAGRAM = 'IG'
FACEBOOK = 'FB'
TWITTER = 'TW'

PLATFORM_CHOICES = (
(INSTAGRAM, 'Instagram'),
(FACEBOOK, 'Facebook'),
(TWITTER, 'Twitter'),
)

platform = models.CharField(
max_length=2,
choices=PLATFORM_CHOICES,
default=INSTAGRAM
)

谢谢!

最佳答案

嗯,反向关系名称是 django 默认使用的:platform(模型名称),如下所示:

class Platform(models.Model):
queue_item_id = models.ForeignKey(
Queue_item,
on_delete=models.CASCADE
)

我们可以使用反向名称来执行查询,然后您尝试使用不正确的 s 访问它。

...<s>to_attr='platforms')</s>...
queue.annotate(first_time=Min('<s>platforms__time</s>'))

正确的是:

<b>....to_attr='platform')...</b>
queue.annotate(first_time=Min('<b>platform__time</b>'))

如果你想将 to_attr='platforms' & platforms__times 一起使用,你可以更改反向名称:

queue_item_id = models.ForeignKey(
Queue_item,<b>reverse_name='platforms'</b>,
on_delete=models.CASCADE
)

Since queue_item_id is a foreign key, no need to end the field name with _id. Just queue_item will be OK, Django has already create a similar for you like queue_item_id

关于python - 无法访问 annotate() 中的 to_attr 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51341226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com