Python Django-如何创建可分页的;加入;使用通用外键时进行查询?

Python Django-如何创建可分页的;加入;使用通用外键时进行查询?,python,django,django-models,django-queryset,django-contenttypes,Python,Django,Django Models,Django Queryset,Django Contenttypes,我想更改此查询以返回相关字段: 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 = 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"??
到目前为止,我找到的唯一解决方案是手动使用:

for queued_message in MyUnit.messages_in_the_queue.all().select_related():
    do_something_with(queued_message.message_content.description)
但是,这不是查询集,因此不可分页-有没有办法将其转换为可分页查询,返回所需的相关字段?

以下是模型:

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

任何帮助都将不胜感激

这不是
select\u related
的工作方式。您不能要求添加特定字段,只能请求添加关系

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

最后,这也不是泛型关系的工作方式。不能跨泛型关系进行联接,因为它实际上不是外键


然而,这两件事都表明,我不明白你原来的queryset有什么问题。你到底想“翻页”什么?为什么你最初得到的查询集不合适?(当然,您为什么认为无法对普通列表进行分页?

您能否提供一个hpw示例,使模板中的obj.message_content.description不会每次都访问数据库?我以为这就是select_related的作用,但我可能会感到困惑。是的,但select_related不适用于泛型关系。确实-尽管您再次希望
预回迁相关(“消息内容”)
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()