python - 在 Django 中引用多词模型对象

标签 python django django-models django-templates

这可能很简单,但确实让我头疼。我有一个多字模型 ListingImages链接到另一个模型 Listing 。我正在检索 Listing数据并使用它来访问 ListingImages 的对象。但是,我没有得到想要的结果。这是我的文件。

模型.py

class Listing(models.Model):
    listing_title = models.CharField(max_length=255)

class ListingImages(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE)
    image_url = models.ImageField(upload_to=get_image_filename,
                          verbose_name='Listing Images')

    def get_image_filename(instance, filename):
        title = instance.listing.listing_title
        slug = slugify(title)
        return "listings_pics/%s-%s" % (slug, filename)

View .py

    def index(request):
        context = {
            'listings': Listing.objects.filter(status=True)
        }
        return render(request, 'base/index.html', context)

模板片段index.html

    <!--Listing start-->
<div class="property-item col-lg-3 col-md-6 col-12 mb-40">
    <div class="property-inner">
        <div class="image">
            <a href="single-properties.html"><img src="{{ listing.listingImages.image_url.url }}" alt=""></a>
            <ul class="property-feature">
                <li>
                    <span class="area"><img src="{% static 'base/assets/images/icons/area.png' %}" alt="">{{ listing.property.land_size }} SqFt</span>
                </li>
                <li>
                    <span class="bed"><img src="{% static 'base/assets/images/icons/bed.png' %}" alt="">{{ listing.property.bedrooms }}</span>
                </li>
                <li>
                    <span class="bath"><img src="{% static 'base/assets/images/icons/bath.png' %}" alt="">{{ listing.property.bathrooms }}</span>
                </li>
                <li>
                    <span class="parking"><img src="{% static 'base/assets/images/icons/parking.png' %}" alt="">{{ listing.property.car_spaces }}</span>
                </li>
            </ul>
        </div>
        <div class="content">
            <div class="left">
                <h3 class="title"><a href="single-properties.html">{{ listing.listing_title }}</a></h3>
                <span class="location"><img src="{% static 'base/assets/images/icons/marker.png' %}" alt="">{{ listing.city }}</span>
            </div>
            <div class="right">
                <div class="type-wrap">
                    <span class="price">Kshs {{ listing.property.price }}</span>
                    <span class="type">{{ listing.property.get_for_sale_rent_display }}</span>
                </div>
            </div>
        </div>
    </div>
</div>
<!--Listing end-->

但是,在模板中,我没有得到图像 url,而是得到了 <img src="(unknown)" alt=""> 。我不知道我做错了什么,而且我也不知道如何引用多字模型 ListingImages ,是否应该是listingImageslisting-imageslisting_images

最佳答案

直接回答您的问题:正确的调用是 listing.listingimages_set.all() - 它将返回特定列表实例的所有列表图像的查询集。

此外,我建议不要将查询集传递给 django 模板。我认为最好从 python 原语构建模板上下文并传递它。这样就更容易调试和推理:

def index(request):
    listings = Listing.objects.filter(status=True).prefetch_related('listingimages_set')
    context = {
        'listings': [
            {
                'title': listing.listing_title,
                'images': list(listing.listingimages_set.all()),
            } for listing in listings
        ]
    }
    return render(request, 'base/index.html', context)

然后您可以将模板中的列表图像引用为

<ul>
{% for listing in listings %}
    <li>
        {{ listing.title }}
        <ul>
        {% for image in listing.images %}
            <li>{{ image.image_url }}</li>
        {% endfor %}
        </ul>
    </li>
{% endfor %}
</ul>

当然,这只是一个例子。但它表明,通过这种方式,您可以更好地控制模板上下文,并且可以在其内容最终出现在呈现的 HTML 页面中之前对其内容进行调试

顺便说一句,最常见和采用的约定是使用单个名词来调用模型。例如。 ListingImage 而不是 ListingImages

关于python - 在 Django 中引用多词模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796804/

相关文章:

python - 在 Django 中减去日期?

django - 如何在 POSTMAN 中使用 raw 上传图片?

Django REST Serializer 为多个嵌套关系执行 N+1 个数据库调用,3 个级别

python - 关于模拟中心极限定理的问题来自 Book Data Science from Scratch

python - 使用 fileinput 之后使用 raw_input

python - 如何在 opennmt-py 中将字符串转换为路径

python - 如何在不清除数据库的情况下测试 Django on_commit Hook ?

python - Django 使用相关键连接查询

Django- 'WhereNode'对象没有属性 'output_field'错误

python - OpenCV 重映射插值错误?