在Django中,我使用以下代码从LocationImage模型获取与Location相关的图像。
{% for location in locations %}
{% for image in location.locationimage_set.all %}
etc
如果该位置是一个区域,并且该区域没有图像,我希望能够仅为该区域的城市获取图像。
城市也是位置模型的一部分,区域字段设置为区域且related_name ='location_region'
关于如何做到这一点的任何想法?
例如,如果我的LocationImage模型中有一个区域字段,我将如何在区域字段中引用具有该区域ID的所有LocationImages的集合,而不是在主id字段中。
根据要求,型号:
class LocationImage(models.Model):
location = models.ForeignKey(Location)
imagelink = models.URLField(max_length=500, null=True)
class Location(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=200, db_index=True, verbose_name="ascii name")
slug = models.SlugField(max_length=200)
locationtype = models.CharField(max_length=50)
region = models.ForeignKey('self', null=True, blank=True, related_name='location_region')
country = models.ForeignKey('self', null=True, blank=True, related_name='location_country')
其中locationtype ='city','region或'country'
答案 0 :(得分:3)
您可以使用{% for %} ... {% empty %}模板标记。
{% for location in locations %}
{% for image in location.locationimage_set.all %}
...
{% empty %}
{# there is no images for `location` #}
{% ifequal location.locationtype 'region' %}
{% for city in location.location_region.all %}
{% for image in city.locationimage_set.all %}
...
{% endfor %}
{% endfor %}
{% endifequal %}
{% endfor %}
{% endfor %}
但我认为这是太复杂的模板代码。将get_images()
方法添加到Location
模型并在python中实现此逻辑可能会更好吗?
class Location(models.Model):
def get_images(self):
images = self.locationimage_set.all()
if self.locationtype == 'region' and not images:
images = LocationImage.objects.filter(location__region=self)
return images
此方法比模板版本更有效。模板将简单如下:
{% for location in locations %}
{% for image in location.get_images %}
...
{% endfor %}
{% endfor %}