2009-08-05 5 views
3

Guter Morgen zusammen,Django ManyToMany Vorlage Fragen

Ich habe ein PHP-Programmierer schon seit geraumer Zeit gewesen, aber ich habe das Bedürfnis verspürt, mehr in Richtung der Python Richtung zu bewegen, und was besser ist als mit Django herum spielen.

Während ich dabei bin, bin ich an einem Haltepunkt angelangt, an dem ich weiß, dass es eine einfache Lösung gibt, aber ich vermisse sie einfach - Wie zeige ich vieleTomany-Beziehungen in einer Django-Vorlage an?

Meine Django Modell: (die meisten Felder wurden entfernt)

class Category(models.Model): 
    name = models.CharField(max_length=125) 
    slug = models.SlugField() 
categories = models.ManyToManyField(Category, blank=True, null=True) 

class Recipe(models.Model): 
    title = models.CharField('Title', max_length=250) 
    slug = models.SlugField() 

class Photo(models.Model): 
    recipe = models.ForeignKey(Recipe) 
    image = models.ImageField(upload_to="images/recipes", blank=True) 

So gibt es die Basismodelle ich in meiner Anwendung mit dem Namen „Rezepte“.
das gesagt ist, gibt es zwei Fragen nach Antworten auf Ich suche nach:

  1. Wie würde ich mich über die Kategorien für ein Rezept Anzeigen auf seiner Detailseite?
  2. Wie würde ich das Bild für das Rezept auf seiner Detailseite anzeigen?

Wenn ich in die Python-Shell gehen, und geben Sie die folgenden, erhalte ich tun ein Ergebnis:

>>> photos = Photo.objects.filter(recipe=1) 
>>> photos 
[<Photo: Awesome Pasta>] 
>>> for photo in photos: 
...  print "Photo: %s" % photo.logo 
... 
Photo: images/recipes/2550298482_46729d51af__.jpg 

Aber wenn ich so etwas wie das folgende in meiner Vorlage versuchen, erhalte ich eine Fehlermeldung, dass " Ungültiges Block-Tag: 'photo.image'. "

{% for photo in photos %} 
{% photo.image %} 
{% endfor %} 

Obwohl, auch wenn die Arbeit getan hat, wird die ID immer noch schwer in die Ansicht codiert, wie würden Sie gehen über diese Dynamik für jedes Rezept zu haben?

Details Seite View.py Snippet:

def details(request, slug='0'): 
    p = get_object_or_404(Recipe, slug=slug) 
    photos = Photo.objects.filter(recipe=1) 
    return render_to_response('recipes/recipes_detail.html', {'p': p, 'photos': photos}) 

Vielen Dank im Voraus für die Hilfe und das Verständnis für das, was ist wahrscheinlich eine sehr einfache Frage an euch alle!

UPDATE: Beim Entfernen der zusätzlichen Felder in den Modellen habe ich das Kategorienfeld für das Rezeptmodell vergessen.

+0

Obwohl die Frage ManyToMany in seinem Titel erwähnt, sehe ich tatsächlich keine ManyToMany-Felder definiert. – Powerlord

+0

Ist nicht "rezept = modelle.ForeignKey (Rezept)" technisch eine viel zu viele Beziehung? Wenn nicht, entschuldige ich mich für die verwendete Sprache und werde sie gerne ändern. – Oubipaws

+0

@R. Bemrose - Ich entschuldige mich, das Feld Kategorien war speziell ein ManyToMany-Feld, es wurde einfach weggelassen, wenn zusätzliche Felder entfernt wurden, die für die Frage nicht notwendig waren. – Oubipaws

Antwort

3

Von dem, was ich sehen kann, glaube ich Ihnen einen kleinen Syntaxfehler haben:

{{ photo.image }} 

Die {% %} Notation für django Template-Tags verwendet wird:

{% photo.image %} 

stattdessen sein sollte. Variablen werden dagegen mit der Notation {{ }} ausgedrückt.

Um es dynamisch zu machen, können Sie die Tatsache nutzen, dass Ihr Photo Modell einen Fremdschlüssel zu Recipe hat. Das bedeutet, dass es eine umgekehrte Beziehung von der Recipe Instanz ist Sie die Schnecke mit zurück in die Reihe von Fotos geladen haben:

def details(request, slug='0'): 
    p = get_object_or_404(Recipe, slug=slug) 
    photos = p.photo_set.all() 

Hoffentlich, die für Sie arbeitet. Freut mich zu sehen, dass es dir Spaß macht mit Django zu arbeiten!

+0

Vielen Dank für die Hilfe, es ist sehr geschätzt und meine Seite hat jetzt Bilder darauf! – Oubipaws

Verwandte Themen