Джанго изображения в шаблоне через FK - PullRequest
0 голосов
/ 10 июля 2019

Я использую подробный вид, чтобы показать данные, и у меня есть 2 модели.

Проблема в том, что один ФК другого, а тот хранит картинки, и мне нужно их показать. Не могу найти решение. Из-за подробного просмотра.

// ФАЙЛ HTML, КОТОРЫЙ ПОКАЗЫВАЕТ ИЗОБРАЖЕНИЯ // file.html

{{object.hall_address}} ,{{object.hall_city}}<br>

I {{object.hall_owner}}, heartly invite you to have a great time.<br>



{% comment %} {% if object.images.hall_pic0 or object.images.hall_pic1 or object.images.hall_pic2 or object.images.hall_pic3 %}

<img src="{{object.images.hall_pic0.url}}" class="w3-circle" style="width:400px" alt="11"><hr width="15%">

<img src="{{object.HallProperties.hall_pic1.url}}" class="w3-round" style="width:400px" alt=""><hr width="15%">

<img src="{{object.HallProperties.hall_pic2.url}}" class="w3-round" style="width:400px" alt=""><hr width="15%">

<img src="{{object.HallProperties.hall_pic3.url}}" class="w3-round" style="width:400px" alt=""><br>




</div>


{% else %}
{% endif %} {% endcomment %}


{% for pictures in object.hallpictures_set %}
<img src="{{ pictures.hall_pic0.url }}" class="w3-circle" style="width:400px" alt=""><hr width="15%"></div><div class="zoom1">
<img src="{{ pictures.hall_pic1.url }}" class="w3-circle" style="width:400px" alt=""><hr width="15%"></div><div class="zoom1">
...
{% endfor %}
</div>




view.py

class HallDetail(DetailView):
    model = HallProperties
    template_name='hallfiles/hall-details.html'

models.py

class HallProperties(models.Model):
    hall_name = models.CharField(max_length = 128)

    hall_city = models.ForeignKey(CityModel.City, max_length=512)

    hall_owner = models.ForeignKey(
        HallOwnerData, on_delete=models.CASCADE, verbose_name="Hall Owner")

    parking_capacity = models.PositiveSmallIntegerField("Parking Capacity")


class HallPictures(models.Model):

    hall_properties = models.ForeignKey(
        HallProperties, on_delete=models.CASCADE, verbose_name="Hall link")

    hall_pic0 = models.ImageField(
        "Hall Picture 1", upload_to='media/hallpics', blank=True, null=True)

    hall_pic1 = models.ImageField(
        "Hall Picture 2", upload_to='media/hallpics', blank=True, null=True)

    hall_pic2 = models.ImageField(
        "Hall Picture 3", upload_to='media/hallpics', blank=True, null=True)

    hall_pic3 = models.ImageField(
        "Hall Picture 4", upload_to='media/hallpics', blank=True, null=True)

Ответы [ 2 ]

1 голос
/ 10 июля 2019

У вас есть несколько вопросов здесь.Во-первых, object уже является объектом HallProperties;нет необходимости ставить object.HallProperties;предположительно, вы не сделали этого для других полей, таких как hall_name и hall_city.

Во-вторых, внешний ключ - это отношение один ко многим.Таким образом, у вас есть несколько элементов HallPictures, связанных с каждым HallProperties.Вам нужно будет перебрать картинки:

{% for pictures in object.hallpictures_set.all %}
<img src="{{ pictures.hall_pic0.url }}" class="w3-circle" style="width:400px" alt=""><hr width="15%"></div><div class="zoom1">
<img src="{{ pictures.hall_pic1.url }}" class="w3-circle" style="width:400px" alt=""><hr width="15%"></div><div class="zoom1">
...
{% endfor %}

Обратите внимание, что эта структура очень странная.Я не знаю, почему у вас есть отдельная модель или почему на ней четыре отдельных поля изображения.Смысл иметь отдельную модель - иметь только одно изображение, и тогда ваш цикл будет просто перебирать каждый отдельный объект и выводить изображение для каждого.

Также обратите внимание, что это Python иСтиль Django для использования уникальных имен для моделей: HallProperty, HallPicture.

0 голосов
/ 10 июля 2019

Вы должны добавить свойство related_name для hall_properties в модели HallPictures.

hall_properties = models.ForeignKey(
    HallProperties, on_delete=models.CASCADE, verbose_name="Hall link", related_name='images')

После того, как вы сможете получить доступ к изображению объекта.

object.images.hall_pic0.url
...