2017-09-20 2 views
0

のDjango == 1.11.5は、私は生のSQLによって選択得るものORMによって取得に失敗しましたORM

が希望取得に失敗しました。

tag.idとタグのテキストが必要です。

  1. それは望ましい結果を得るためにORMを使用することが可能です:

    あなたは私が状況を理解するのに役立つだろうか?

  2. 以下は、okと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>]> 
01私が何をしたか

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

tag.idとタグのテキストが必要です。最初の質問を編集して、タグモデルを表示します。 – Michael

答えて

0

values_listクエリはあなたの問題を解決する必要があり、

はこれがあなたにtagidを含むタプルのリストを返します

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

、これを試してみて、 name

希望がこれを助ける:-)

関連する問題