2016-06-01 3 views
1

私は2つのモデルを持っています。メインメニューを構築するための1つのモデル、記事のためのもう1つのモデル。すべての記事はForeignKeyメインメニューアイテムにリンクしています。モデルIDを正しく取得

は 私は考え出したことができない

は、どのように私はそれがmenuItemモデルにリンクされ、どのようにURLアドレスをmenuItemモデルのaliasフィールドを使用して、ページArticleに表示することができますか?

マイモデルmenuItem

# -*- coding: utf-8 -*- 
    from django.db import models 

    class MainMenuItem(models.Model): 
     class Meta: 
      db_table = "menu_item" 
     title = models.CharField(max_length = 50) 
     alias = models.CharField(max_length = 50) 

     def __unicode__(self): 
      return self.title 

     def __str__(self): 
      return self.title 

マイモデルArticle

class Article(models.Model): 
     class Meta: 
      db_table = "article" 

     menu = models.ForeignKey(MainMenuItem, blank = True, null = True) 
     active = models.BooleanField(default = True) 
     created = models.DateTimeField(auto_now_add=True) 
     updated = models.DateTimeField(auto_now=True) 

     def __unicode__(self): 
      return unicode(self.menu) or u'' 

     def __str__(self): 
      return self.menu 

マイ

views.py

def menu_builder(request, alias): 
     findId = MainMenuItem.objects.???? 
     elements = { 
      'menuItems': MainMenuItem.objects.all(), 
      'article': Article.objects.get(id=??????), 
     } 
     return render_to_response('myview.html', elements) 
マイ urls.py

urlpatterns = [ 
     url(r'^admin/', admin.site.urls), 
     url(r'^(?P<alias>.+?)/$', 'menuItem.views.menu_builder'), 
    ] 

答えて

2

は、あなただけの、そのMainMenuItemに関連するすべての記事を取得MainMenuItem上の別名でフィルタ:

def menu_builder(request, alias): 
    main_menu_item = MainMenuItem.objects.get(alias=alias) 
    elements = { 
      'menuItems': main_menu_item, 
      'articles': main_menu_item.article_set.all(), 
     } 
    return render_to_response('myview.html, elements) 

Djangoのドキュメントについてrelated object lookup using _setを。

編集:

私は以前objects.get()を使用している必要がありますが、間違っているobjects.filter()を使用していました。違いは、正確に1つのアイテムを取得して、関連する記事をそのオブジェクトに取得できることです。 filterを使用すると、クエリーセットが作成されますが、複数のオブジェクトの関連するオブジェクトをチェックするのは意味がありません。したがって、エラー'QuerySet' object has no attribute 'article_set'です。

MainMenuItemオブジェクトでは別のaliasが必要です。そうでない場合は、get()は「複数のオブジェクトが返されました」という例外をスローします。

+0

こんにちは!そして、答えに感謝します。私はあなたのコードを使用しようとしましたが、 ''QuerySet'オブジェクトには属性 'article_set''がありませんでした。関連する名前を作ろうとしましたが、同じエラーが発生しました... –

+0

私は間違いを犯して答えを修正しました。答えをスプーンフィードしたくないので、できるだけ説明しようとしています。詳細については、これを確認してください:http://stackoverflow.com/questions/3221938/difference-between-djangos-filter-and-get-methods –

関連する問題