2016-06-01 15 views
1

Ich habe zwei Modelle. Ein Modell für den Aufbau des Hauptmenüs, ein anderes - für die Artikel. Jeder Artikel hat ForeignKey, um es mit dem Hauptmenüpunkt zu verknüpfen.ID des Modells richtig erhalten

ich nicht heraus kann, wie kann ich zeigen, auf Seite Article, dass menuItem Modell verknüpft und wie menuItem Modell alias Feld für die URL-Adresse zu benutzen?

Mein Modell 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 

Mein Modell 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 

Mein 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) 

Mein urls.py:

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

Antwort

2

Sie filtern, dass nur durch den Alias ​​auf MainMenuItem dann alle Artikel erhalten, die zu diesem MainMenuItem bezogen werden:

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 doc über related object lookup using _set.

Edit:

Ich habe sollte objects.get() zuvor verwenden, sondern wurde mit objects.filter() was falsch ist. Der Unterschied besteht darin, dass Sie genau einen Artikel erhalten sollten, um verwandte Artikel zu diesem Objekt zu erhalten. Wenn Sie filter verwenden, würden Sie am Ende ein Abfrage-Set haben, aber dann macht es keinen Sinn, verwandte Objekte auf mehreren Objekten zu überprüfen, daher der Fehler 'QuerySet' object has no attribute 'article_set'.

Achten Sie darauf, dass Sie eindeutige alias für MainMenuItem Objekte haben sollten, sonst würde get() eine Ausnahme werfen "Mehrere Objekte zurückgegeben".

+0

Hallo! Und danke für eine Antwort. Ich habe versucht, Ihren Code zu verwenden, aber bekam "QuerySet" -Objekt hat kein Attribut "article_set" Ich versuchte, verwandter Name zu machen, aber immer noch denselben Fehler ... –

+0

Ich machte einen Fehler und korrigierte meine Antwort. Ich versuche so viel wie möglich zu erklären, weil ich nicht mit Antworten löffeln möchte. Bitte überprüfen Sie dies über die Details: http://stackoverflow.com/questions/3221938/difference-between-djangos-filter-and-get-methods –