Soy principiante en Django.
Tengo un proyecto con los siguientes modelos:
Mis artículos modelos:
class Post(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(max_length=160) content = models.TextField() image = models.ImageField(upload_to=upload_location) timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) updated = models.DateTimeField(auto_now=True, auto_now_add=False) categorie = models.CharField(max_length=200) categorie = models.ForeignKey('categorie.Categorie') publier = models.BooleanField()Mis modelos de categorías de cartera que están vinculados con mi modelo de artículo:
class Categorieport(models.Model): title = models.CharField(max_length=200) article = models.OneToOneField('posts.Post')Y por ultimo, mi portafolio de modelos con todas las fotos:
class Portfolio(models.Model): title = models.CharField(max_length=200) image = models.ImageField(upload_to=upload_location) timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) updated = models.DateTimeField(auto_now=True, auto_now_add=False) categorieportfolio = models.ForeignKey('Categorieport')En una vista y una plantilla, me gustaría mostrar información sobre el artículo y la cartera relacionada con el artículo.
Escribí la siguiente vista:
def portfolio(request, article=None): portfolio = get_object_or_404(Categorieport, article=article) image_portfolio = portfolio.portfolio_set.all() return render(request, 'portfolio1.html', {'portfolio': portfolio, 'image_portfolio': image_portfolio})Y las siguientes plantillas:
<div class="titre-display"> <h2>{{ portfolio.article.timestamp|date:"d EY" }} / {{ portfolio.article.categorie}} </h2> <h1>{{ portfolio.article.title}}</h1> </div> <div class="content-display"> <div class="content-display-main"> <div class="content-display-main-portfolio"> <div class="image-portfolio"> <a class="example-image-link" href="{{ image_portfolio.image.url }}" data-lightbox="example-set" data-title="{{image_portfolio.title}}"> </a>Puedo acceder a la información de mi artículo pero no puedo acceder a la información de mi portafolio. Lo probé con el shell, y funciona. No puedo entender por qué no funciona en mi vista y plantilla.
¿Tienes alguna idea?
Gracias de antemano
Singertwist
Prueba esto:
# views.py def portfolio(request, article=None): # first get the Post instance with slug = article (I'm assuming article passed as url argument, is a slug) post = get_object_or_404(Post, slug=article) # get the Categoriepost object based on a specifi article categorie_port = get_object_or_404(Categorieport, article=post) # image_portfolio is a QuerySet (that is a list of Portfolio objects) image_portfolio = categorie_port.portfolio_set.all() return render(request, 'portfolio1.html', {'portfolio': categorie_port, 'image_portfolio': image_portfolio})Deje su HTML como está.
Su image_portfolio es un conjunto de consultas, lo que significa que es una especie de lista, debe usar un bucle para acceder a los elementos y luego a las propiedades:
<div class="content-display"> <div class="content-display-main"> <div class="content-display-main-portfolio"> <div class="image-portfolio"> {% for item_img in image_portfolio %} <a class="example-image-link" href="{{ item_img.image.url }}" data-lightbox="example-set" data-title="{{item_img.title}}"></a> {% endfor %}Hola gracias a todos por su respuesta.
Entonces, usé un bucle for para resolver mi caso como se mencionó anteriormente.
A continuación, mi código:
<div class="titre-display"> <h2>{{ portfolio.article.timestamp|date:"d EY" }} / {{ portfolio.article.categorie}} </h2> <h1>{{ portfolio.article.title}}</h1> </div> <div class="content-display"> <div class="content-display-main"> <div class="content-display-main-portfolio"> {% for photo in image_portfolio %} <div class="image-portfolio"> <a class="example-image-link" href="{{ photo.image.url }}" data-lightbox="example-set" data-title="{{photo.title}}"> {% thumbnail photo.image "300x300" crop="center" as im %} <img class="example-image" src="{{ im.url }}" alt=""/> {% endthumbnail %} </a> <p>{{photo.title}}</p> </div> {% empty %} <p>Aucun portfolio.</p> {% endfor %} </div> </div>Y mis puntos de vista:
def portfolio(request, slug=None, article=None): slug = get_object_or_404(Post, slug=slug) portfolio = get_object_or_404(Categorieport, article=article) image_portfolio = portfolio.portfolio_set.all() return render(request, 'portfolio.html', {'portfolio': portfolio, 'image_portfolio': image_portfolio})De nuevo, gracias por tu ayuda
Singertwist