我没能得到ORM的期望

时间:2017-09-20 19:54:06

标签: django

的Django == 1.11.5

我无法通过ORM获得原始SQL select所获得的内容。

我需要tag.id和标记文字。

你能帮我理解一下情况吗?

  1. 是否可以使用ORM来获得所需的结果?

  2. 下面是正常运行的代码和完全失败的ORM选择。你能否告诉我代码是否可以接受。

  3. 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 }
    

1 个答案:

答案 0 :(得分:0)

values_list查询可以解决您的问题,

试试这个,

f = Frame.objects.get(pk=1)
list(f.frametag_set.all().values_list('tag_id','tag__tag'))

这会返回一个包含tag idname

的元组列表

希望这有助于: - )