#python #django #regex
Вопрос:
У меня есть модель в Django, в которой есть поля photo_1
photo_2
, photo_3
и многие другие поля, которые не содержат строки «фотография» в их именах. Кроме того, поля фотографий могут быть пустыми, поэтому я могу найти несколько строк с пустыми полями фотографий. Для шаблона html есть ли способ просмотреть поля с именем «^фото_[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=»{{}}»
tks
Комментарии:
1. Это похоже на неправильное моделирование. Обычно для фотографий вы создаете дополнительную модель, а затем позволяете этой модели ссылаться на ваш
Listing
объект модели. Таким образом, он более компактен, еслиListing
у a, например, нет фотографий, и его удобнее перечислять поверх него.
Ответ №1:
Обычно это не хорошая идея, чтобы создать модель с большим количеством photo_i
полей: это означает, что в базе данных нужно хранить много полей, где вполне вероятно, что большинство из них пусты, но кроме того он делает запросы сложнее (например, находить Listing
объект, который содержит некоторые цены приведет в лонге запроса) и, кроме того, вероятно, в конечном итоге вам понадобится Listing
дополнительная фотография.
Чтобы реализовать что-то, где a Listing
может иметь произвольное количество фотографий, создается дополнительная модель, имеющая photo
поле и ссылки на Listing
объект через a 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>