我正在使用详细视图显示数据,并且我有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)
答案 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