スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    django…好きなんだけどエラーばっかorz

    0
      現在超ハマリ中。
      多対多リレーションで、manage.py shellではOK(思い通りの表示)なのにテンプレート上に書くとTypeErrorと怒られます。

      tag
      --name
      --prefix

      entry
      --title
      --tag(ManyToMany)
      --body

      という作りのmodelを書いてあって、対応するDBもsyncdbで作ってある。


      で、entry_detailのテンプレートの中で

      このエントリーに関連付けられたタグ:
      {% for tag in object.tag.all %}
      {{ tag.name }}
      {% endfor %}

      と書いてエラーですorz

      shellで


      e=Entry.objects.get(pk=1)
      for tag in e.tag.all():
      tag.name


      とやってOKなのに???

      もしかして私、何か根本的に間違ってます??
      一応djangoはローカルもテスト用サーバーも両方最新svn版です。

      (追記)
      Debug=Trueでのエラーメッセージは
      Caught an exception while rendering: Cannot resolve keyword 'entry' into field. Choices are: id, prefix, name
      です。
      念の為、shellで
      object = Entry.objects.get(id=1)
      tags = Tag.objects.filter(entry=object)
      とやってみましたが、shellではエラーは出ません。
      shellと実際のコードで挙動が違うのは初めてで、正直非常に戸惑ってます。



      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 12:51
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        初めまして、常山(じょうざん)といます。
        見当違いだったら、申し訳ないのですが、
        {{ tag.name }} ではなく {{ tag }}ではどうですか?
        http://geeksite.googlecode.com/svn/trunk/templates/blog/entry_detail.html
        を参考にしてコメントしてみたのですが (^^;
        常山さん、いつもトラバありがとうございます!
        Caught an exception while rendering: Cannot resolve keyword 'entry' into field. Choices are: id, name, prefix
        と出ます…

        わざわざtagのテーブルでentry__pk=1と照合しようとして、失敗している状態のようです????
        tag_set.allと書くと、DB上タグの登録があるのに、tag_set.allは空になるようですし。

        テーブル名を変えたり、リレーション名をつけたり、色々やってるんですが、同じところで足踏みです。
        仕方ないのでobject.idを受け取ってリレーションのあるタグ全部を表示するカスタムタグを作ろうかな?なんて思ってますーー;
        実験は続きます。。。
        同じようなことをやったことがありますが以下のような感じで普通に動いています。

        class Entry(models.Model):
        ----title = models.CharField(maxlength=128)
        ----tags = models.ManyToManyField(Tag, blank=True)

        class Tag(models.Model):
        ----name = models.CharField(maxlength=128, unique=True)

        でモデル定義してテンプレートは以下。

        {% for tag in data.tags.all %}
        {{ tag.name|escape }}
        {% endfor %}


        違うところと言えば、フィールド名が複数形なくらい?
        マニュアルには「必須ではありませんが, ManyToManyField の名前 (上の例では toppings)は,リレーション先のモデル名の複数形にするよう勧めます.」というように必須ではないと書いてありますが・・・。
        • 2007/06/08 7:24 PM
        私は、リレーションを使うような場合はモデルにメソッドをつけて、そのメソッドをプロパティとして呼ぶようにしています。
        メソッドが def hoge(self)のものについてはプロパティ化しなくてもテンプレートから呼べるはずなんですが…?
        #今度試してみますね
        • everes
        • 2007/06/08 8:00 PM
        >(無名)さん
        アドバイスありがとうございます。とりあえずManyToManyを「tags」と複数形にしてみましたが、だめでした…
        DB全てをsyncdbしてないから??月曜日に全てDBを空にして、複数形にして、もう一度やり直して見ます。

        >everesさん
        実は、entryのモデルにメソッドを書いて(def hoge(self)して)呼び出しても、タグ周りのメソッドだけ同じエラーになるんです(?_?)
        もう本当に謎で、一から作り直したら意味不明に直ることを祈ってる状態です。。。
        • ★もも★
        • 2007/06/10 2:27 AM
        コメントする








           
        この記事のトラックバックURL
        トラックバック

        PR

        calendar

        S M T W T F S
           1234
        567891011
        12131415161718
        19202122232425
        2627282930  
        << November 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM