通过FK模板中的Django图像

时间:2019-07-10 11:51:14

标签: django django-forms django-templates django-views

我正在使用详细视图显示数据,并且我有2个模型。

问题在于,一个是另一个的FK,另一个是存储图片的照片,我需要向他们展示。 找不到解决方案。因为有“详细信息”视图。

//显示图片的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 个答案:

答案 0 :(得分:1)

您在这里遇到一些问题。第一个是object已经是HallProperties对象;无需放置object.HallProperties;大概在hall_name和hall_city等其他字段中您没有这样做。

第二,外键是一对多关系。因此,您具有与每个HallProperty相关的多个HallPictures项。您需要遍历图片:

{% 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。

答案 1 :(得分:0)

您应该在HallPictures模型中为hall_properties添加related_name属性。

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

您可以访问对象的图像。

object.images.hall_pic0.url