Использование регулярного выражения для имени поля в 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>

Я хотел бы пройтись по "listing" QuerySet, ища поля с именем "^photo_[0-9]*$" и, если значение для этого поля не пусто, передать ему ref="{{}}" и src="{{}}". tks

Обычно не хорошей идеей является создание модели с большим количеством photo_i полей: это означает, что база данных должна хранить большое количество полей, где, скорее всего, большинство из них пустые, но, кроме того, это усложняет запрос (например, поиск Listing объекта, который содержит определенную фотографию, приведет к длинному запросу) и, кроме того, вероятно, в конечном итоге вам понадобится Listing с дополнительной фотографией.

Чтобы реализовать что-то, где Listing может иметь произвольное количество фотографий, создается дополнительная модель, которая имеет поле photo и связана с объектом Listing через ForeingKey.

Таким образом, модель выглядит следующим образом:

class Listing(models.Model):
    # no photo_i items
    # …
    pass

class ListingPhoto(models.Model):
    listing = models.ForeignKey(
        Listing,
        on_delete=models.CASCADE,
        related_name='photos'
    )
    photo = models.ImageField()

тогда вы можете визуализировать фотографии с помощью:

<div class="col-md-2">
    {% for photo in listing.photos.all %}
    <a href="{{ photo.photo.url }}" data-lightbox="home-images">
        <img src="{{ photo.photo.url }}" alt="" class="img-fluid">
    </a>
</div>
Вернуться на верх