在Django中使用正则表达式作为字段名



我在Django中有一个模型,有字段photo_1,photo_2,photo_3和许多其他字段,不包含"照片"串在他们的名字上。此外,照片字段可以是空的,因此我可以找到一些具有空照片字段的行。对于html模板,是否有一种方法可以遍历名为"^photo_[0-9]*$"并且只选择那些非空的?

我的意思是:

# views.py file
def listing(request, listing_id):
listing = get_object_or_404(Listing, pk=listing_id)

context = {
'listing': listing
}
return render(request,"listings/listing.html", context)
# listsing.html file
<div class="col-md-2">
<a href="{{listing.photo_n.url}}" data-lightbox="home-images">
<img src="{{listing.photo_n.url}}" alt="" class="img-fluid">
</a>
</div>

我想浏览一下"清单"。查询集,搜索名为"^photo_[0-9]*$"并且,如果该字段的值不为空,则将其传递给ref="{{}}"和src ="{{}},谢谢

通常它是不是一个好主意,创建一个模型有很多photo_i字段:这意味着数据库需要存储很多字段,其中很可能大多数是空的,但它进一步使查询更难(例如找到一个Listing对象,包含一个特定的照片将导致一个长查询),进一步可能最终你将需要一个Listing与一个额外的照片。

为了实现一个Listing可以有任意数量的照片,一个额外的模型有一个photo字段,并通过ForeingKey链接到一个Listing对象。

这意味着模型看起来像:

class Listing(models.Model):
#nophoto_iitems
# …
pass
classListingPhoto(models.Model):
listing = models.ForeignKey(
Listing,
on_delete=models.CASCADE,
related_name='photos'
)
photo = models.ImageField()

,然后你可以渲染照片:

<div class="col-md-2">
{% forphoto in listing.photos.all%}
<a href="{{ photo.photo.url }}" data-lightbox="home-images">
<img src="{{ photo.photo.url }}" alt="" class="img-fluid">
</a>
</div>

最新更新