我想更改此查询以返回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()
非常感谢任何帮助!
答案 0 :(得分:0)
这不是select_related
的工作方式。你不能要求添加一个特定的字段,只是一个关系。
并不是values()
的工作原理:如果您希望将连接字段添加到值列表中,则需要在字段列表中请求它。
最后,通用关系也不起作用。你不能加入通用关系,因为它不是真正的外键。
然而,这些事情都说,我不明白你的原始查询集有什么问题。您实际上想要“页面”是什么,为什么您最初不适合的查询集? (当然,为什么你认为你不能对普通列表进行分页?)