的Django == 1.11.5
我无法通过ORM获得原始SQL select所获得的内容。
我需要tag.id和标记文字。
你能帮我理解一下情况吗?
是否可以使用ORM来获得所需的结果?
下面是正常运行的代码和完全失败的ORM选择。你能否告诉我代码是否可以接受。
tags.models
class Tag(models.Model):
tag = models.CharField(max_length=50,
blank=True,
null=False,
default="",
unique=True,
verbose_name=_('tag'))
frametags.models
class FrameTag(models.Model):
frame = models.ForeignKey(Frame,
on_delete=models.CASCADE,
verbose_name=_("frame"))
tag = models.ForeignKey(Tag,
on_delete=models.CASCADE,
verbose_name=_("tag"))
ORM(尝试失败)
>>> f = Frame.objects.get(pk=1)
>>> f.frametag_set.all()
<QuerySet [<FrameTag: Frame 1, tag sport>, <FrameTag: Frame 1, tag dancing>]>
我做了什么:
def custom_sql(frame_instance):
with connection.cursor() as cursor:
cursor.execute("select tags_tag.id, tags_tag.tag from frametags_frametag join tags_tag on (tags_tag.id=tag_id) where frame_id=%s", [frame_instance.id])
rows = cursor.fetchall()
return rows
def show_tags(frame_instance):
rows = custom_sql(frame_instance)
return {'object_list': rows }
答案 0 :(得分:0)
values_list
查询可以解决您的问题,
试试这个,
f = Frame.objects.get(pk=1)
list(f.frametag_set.all().values_list('tag_id','tag__tag'))
这会返回一个包含tag
id
和name
希望这有助于: - )