在过去的几天里,我一直试图让管理员用户为每一篇帖子上传多个图像/幻灯片,我想到的一个想法是在帖子For循环中嵌套一个For循环,对于每一篇文章,也渲染与之相关的每一个图像,但似乎我做得不太好。
class Post(models.Model):
title = models.CharField(max_length = 128)
image = models.ImageField(default = 'default.jpg', upload_to = 'post_pics')
content = models.TextField()
date_posted = models.DateTimeField(default = timezone.now)
category = models.ForeignKey(Category, on_delete = models.CASCADE)
def __str__(self):
return f"{self.title} - {self.category}"
def get_image_filename(instance, filename):
title = instance.post.title
slug = slugify(title)
return "post_images/%s-%s" % (slug, filename)
class Images(models.Model):
post = models.ForeignKey(Post, default= None, on_delete = models.CASCADE, related_name= 'Images')
image = models.ImageField( upload_to = get_image_filename, verbose_name = 'Images')
def __str__(self):
return f"imazh per {self.post}"
和我的Html:
<div class="post-list-container">
{% for post in posts %}
<article class="post-container">
<div class="post-top">
> Focus on the for loop here
{% for post.Images in post.Images %}
<img src="{{ post.Images.url }}">
{% endfor %}
<div class="post-title"><a href="#"><h1>{{ post.title }} </h1></a></div>
<div class="post-images">
<img class="rounded" src="{{ post.image.url }}">
</div>
</div>
<div class="post-middle">
<div class="post-content"><p> {{ post.content }}</p> </div>
</div>
<div class="post-bottom">
<div class="post-category"><a href="{% url 'by-category' post.category %}"><h2>{{ post.category }}</h2></a>
</div>
<div class="post-date_posted"><h1>{{ post.date_posted|date:"F d, Y" }}</h1>
</div>
</div>
</article>
{% endfor %}
</div>
有没有办法用这种方式渲染这些图像?
Post
将有一个相关的集合,这就是您所说的反向关系.
默认情况下,django将使Post
实例上的关系成为images_set
,因为它在关系上使用您的模型名称&添加CCD_ 4。
也可以通过在FK字段上设置related_name
属性来选择自己的相关名称。(文档(
下面是一个例子;
class Map(models.Model):
members = models.ManyToManyField(
User,
related_name='maps',
verbose_name=_('members')
)
# Reverse relationship:
User.maps.all()
或者在python中使用您的模型;
post = Post.objects.first()
print(f"Images in post {post.title}")
for image in post.images_set.all():
print(image.url)
因此,如果没有自定义的related_name
,您的模板循环将类似于;
{% for image in post.images_set.all %}
<img src="{{ image.url }}">
{% empty %}
<p>No images found</p>
{% endfor %}