0

にテンプレートレベルでそれ自体に外部キーを持つ辞書を表示するにはどのように私はこのようなmodel.pyありますはジャンゴ

class EventTypeCategory(models.Model): 

     name = models.CharField(max_length=50, verbose_name="Name") 
     user = models.ForeignKey(User, verbose_name="User") 
     Message_slug = models.SlugField(blank=True, verbose_name="Message") 
     sub_categories = models.ForeignKey('self', verbose_name="Self-Categories", null =True, blank = True) 

一方sub_categoriesフィールドは

私が持っている自分自身への外部キーですこのようview.py:

@login_required 
def eventcateg_detail(request): 
    ca = EventTypeCategory.objects.values() 
    return render_to_response('events/categ.html',{ 
     'obj': ca, 
     }) 

CAは以下のように辞書を返し、一方:

0を
[{'Message_slug': u'ngcg', 'sub_categories_id': 124L, 'user_id': 1L, 'id': 146L, 'name': u'ngcg'}, {'Message_slug': u'lkn', 'sub_categories_id': 146L, 'user_id': 1L, 'id': 149L, 'name': u'lkn '}] 

categ.htmlの各辞書コンテンツから「サブカテゴリ、メッセージ」および「名前」の値を印刷します。 sub_categoriesは "id"(それを指すための外部キー)を返しています。私はジャンゴで初心者ですし、また、同様の質問を見ていたが、それは私のために動作しませんでした:(

データはcateg.htmlで次のように印刷する必要があります。

Message: Name: Sub-categories: 
ngcg  ngcg  (values which refer to foriegn key) 

答えて

2

通常、私たちはQuerySet.allを使用します()、()の代わりにQuerySet.valuesの、モデルインスタンスオブジェクトを返した。

あなたがForeignKeyのあるfooというフィールドを持っている場合は、デフォルト値 ()呼び出しはfoo_idと呼ばれる辞書のキーを返します。この は、モデルを格納する非表示モデル属性の名前であるため実際の値は です(foo属性は関連するモデルを参照しています)。

ドキュメント: django.db.models.query.QuerySet.valuesを確認してください。

@login_required 
def eventcateg_detail(request): 
    ca = EventTypeCategory.objects.all() 
    return render_to_response('events/categ.html',{ 
     'objs': ca, 
     }) 

ここで、objはEventTypeCategoryインスタンスです。それは何も出力しない

{% for obj in objs %} 
    {{obj.Message_slug}}, {{obj.name}}, {{obj.sub_categories.name}} 
    ngcg,     ngcg,   (name of instance which refer to foriegn key) 
{% endfor %} 
+0

は –

+0

申し訳ありませんが、私はミスを犯しました。単に 'objs'をリストとして使用してください。 – wangeek

+0

また、docによると、values()はselect_relatedを無視し、joinではなく複数のクエリを発生させます。 – okm