Access ForeignKey set directly in template in Django

后端 未结 5 2103
南方客
南方客 2020-12-13 02:43

I have this simplified model:

class Item(models.Model):
    name = models.CharField(max_length=120)

class ItemImage(models.Model):
    image = models.ImageF         


        
相关标签:
5条回答
  • 2020-12-13 03:15

    Or you could add a method to your Item model:

    def get_first_image(self):
        return self.itemimage_set.all()[0]
    

    and then call this method in your template:

    {{ item.get_first_image }}
    

    Or you could use:

    {{ item.itemimage_set.all.0 }}
    

    and to get the first image's url:

    <img src="{{ item.itemimage_set.all.0.url }}">
    

    Though if you need more flexibility (more than one picture in certain cases, etc.) it's probably best to write a little templatetag.

    0 讨论(0)
  • 2020-12-13 03:22

    If you want the first picture from set you can do:

    {% for item in item.image_set.all %}
    
    {{if forloop.first }}
    <img src="{{ item.url }}">
    {% endif %}
    
    {% endfor %}
    

    But i also love Andray solution with 'with'

    0 讨论(0)
  • 2020-12-13 03:23
    {% with item.itemimage_set.all|first as image %}
      <img src="{{ image.url }}" />
    {% endwith %} 
    
    0 讨论(0)
  • 2020-12-13 03:23

    One possible way would be to iterate over all the ItemImages like so:

    {% for item in items %}
    <div>
        {{ item.name }}<br>
        {% for image in item.itemimage_set.all %}
        <img src="{{ image.image.url }}">
        {% endfor %}
    </div>
    {% endfor %}
    
    0 讨论(0)
  • 2020-12-13 03:28

    This worked for me, use the related_name in your models.

    models.py

    class Building(models.Model):
        address  = models.CharField(max_length=200, blank=True, null=True)
        city     = models.CharField(max_length=200, blank=True, null=True)
    
    class Space(models.Model):
        title     = models.CharField(max_length=200, blank=True, null=True)
        building  = models.ForeignKey(Building, related_name="spaces_of_this_building")
    

    buildings.html

    {% for space in building.spaces_of_this_building.all %}
      {{ space.size }}
    {% endfor %}
    
    0 讨论(0)
提交回复
热议问题