3 Stimmen

Django ManyToMany Vorlage Fragen

Guten Morgen zusammen,

Ich bin seit geraumer Zeit PHP-Programmierer, aber ich hatte das Bedürfnis, mich mehr in Richtung Python zu bewegen, und was gibt es Besseres, als mit Django herumzuspielen.

Während in den Prozess, ich bin an einem Haltepunkt kommen, wo ich weiß, es ist eine einfache Lösung, aber ich bin nur fehlt es - Wie zeige ich viele Beziehungen in einer Django-Vorlage?

Mein Django-Modell: (die meisten Felder sind entfernt worden)

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)

Es gibt also die grundlegenden Modelle, die ich in meiner Anwendung namens "Rezepte" verwende.
In diesem Zusammenhang suche ich Antworten auf zwei Fragen:

  1. Wie kann ich die Kategorien für ein Rezept auf der Detailseite anzeigen?
  2. Wie kann ich das Bild des Rezepts auf der Detailseite anzeigen lassen?

Wenn ich die Python-Shell aufrufe und Folgendes eingebe, erhalte ich tatsächlich 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 etwas wie das Folgende in meiner Vorlage versuche, erhalte ich die Fehlermeldung "Ungültiges Block-Tag: 'photo.image'."

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

Obwohl, selbst wenn das funktionierte, die ID noch hart in die Ansicht codiert ist, wie würden Sie gehen über mit dieser dynamischen für jedes Rezept?

Details Seite View.py Schnipsel:

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 eine wahrscheinlich sehr einfache Frage an Sie alle!

UPDATE: Beim Entfernen der zusätzlichen Felder in den Modellen habe ich das Feld "Kategorien" für das Modell "Rezepte" vergessen.

3voto

Jarret Hardie Punkte 89900

Soweit ich sehen kann, haben Sie einen kleinen Syntaxfehler:

{% photo.image %}

sollte stattdessen lauten:

{{ photo.image }}

El {% %} Notation wird für Django-Vorlagen-Tags verwendet. Variablen hingegen werden mit der Notation {{ }} Notation.

Um es dynamisch zu gestalten, können Sie die Tatsache ausnutzen, dass Ihr Photo Modell hat einen Fremdschlüssel zu Recipe . Dies bedeutet, dass es eine umgekehrte Beziehung zwischen dem Recipe Instanz, die Sie mit dem Slug zurück in den Fotosatz geladen haben:

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

Hoffentlich klappt das bei Ihnen. Es freut mich, dass Ihnen die Arbeit mit Django Spaß macht!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X