1

我想更改此查询以返回 RELATED 字段:

msgs = my_unit.messages_in_the_queue.all().select_related("message_content__description")

然而,

>>> msgs.values()[0]
{... 'message_type_id': 31, 'object_id': 4, ...} # <--where is the "description"??

>>> msgs.values("message_content__description")[0]
FieldError: Cannot resolve keyword 'message_content__description' into field. Choices are: acknowledged_time, id, message_type, object_id, sent_time, destination

到目前为止,我发现的唯一解决方案是手动使用它:

for queued_message in MyUnit.messages_in_the_queue.all().select_related():
    do_something_with(queued_message.message_content.description)

但是,这不是 QuerySet,因此不可分页 -有没有办法将其变成返回所需相关字段的可分页查询?

以下是模型:

class MessageQueueModel(models.Model):
    destination = models.ForeignKey(MyUnit, related_name="messages_in_the_queue")
    sent_time = models.DateTimeField(default=None, null=True, blank=True)
    acknowledged_time = models.DateTimeField(default=None, null=True, blank=True)

    #the message:
    message_type = models.ForeignKey(ContentType, null=True, blank=True)
    object_id = models.PositiveIntegerField(null=True, blank=True)
    message_content = generic.GenericForeignKey('message_type', 'object_id')


class CommandModel(models.Model):
    description = models.CharField(max_length=100)
    command_xml = models.TextField()

任何帮助将非常感激!

4

1 回答 1

0

这不是如何select_related工作的。您不能要求添加特定字段,而只能要求添加关系。

这也不是如何values()工作的:如果您希望将连接字段添加到您的值列表中,您需要在字段列表中请求它。

最后,这也不是泛型关系的工作方式。您不能跨通用关系加入,因为它不是真正的外键。

然而,这两件事都说,我不明白你原来的查询集有什么问题。您实际上想要“分页”什么,为什么您最初获得的查询集不适合?(当然,为什么你认为你不能对普通列表进行分页?)

于 2013-01-23T11:36:00.100 回答