Question

Bonjour à tous,

Je suis programmeur PHP depuis un certain temps, mais j’ai ressenti le besoin de me diriger davantage vers Python et c’est mieux que de jouer avec Django.

Au cours de ce processus, je suis arrivé à un point d'arrêt où je sais qu'il existe une solution simple mais il me manque une solution: comment puis-je afficher de nombreuses relations dans un modèle Django?

Mon modèle Django: (la plupart des champs ont été supprimés)

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)

Il existe donc des modèles de base que j'utilise dans mon application, appelés "recettes".

Cela dit, je cherche des réponses à deux questions:

  1. Comment puis-je afficher les catégories d'une recette sur sa page de détails?
  2. Comment puis-je afficher l'image de la recette sur sa page de détails?

Si je vais dans le shell Python et que je saisis ce qui suit, j'obtiens un résultat:

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

Mais lorsque j'essaie quelque chose comme ce qui suit dans mon modèle, le message d'erreur "Balise de bloc non valide:" photo.image "s'affiche."

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

Bien que, même si cela a fonctionné, l'ID est toujours codé en dur dans la vue, comment voulez-vous obtenir cette dynamique pour chaque recette?

Détails de la page de vue.py extrait:

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

Merci d'avance pour votre aide et votre compréhension pour une question probablement très simple pour vous tous!

UPDATE: lors de la suppression des champs supplémentaires dans les modèles, j'avais oublié le champ de catégories du modèle Recipes.

Était-ce utile?

La solution

D'après ce que je peux voir, je pense que vous avez une petite erreur de syntaxe:

{% photo.image %}

devrait plutôt être:

{{ photo.image }}

La notation {%%} est utilisée pour les balises de modèle django. Les variables, par contre, sont exprimées avec la notation {{}} .

Pour le rendre dynamique, vous pouvez tirer parti du fait que votre modèle Photo a une clé étrangère pour Recipe . Cela signifie qu'il y aura une relation inverse de l'occurrence Recipe que vous avez chargée à l'aide du slug vers l'ensemble de photos:

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

J'espère que cela fonctionnera pour vous. Content de voir que vous aimez travailler avec Django!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top