Получение количества объектов в объединенном наборе запросов
Я разработал представление Django, которое объединяет два набора запросов, используяchain; код ниже.
def sharedcategories_list(request):
list = SharedCategories.objects.all()
context = {"list": list}
return render(request, "shared-categories/shared_categories_list.html", context)
def single_sharedcategory(request, slug):
object = get_object_or_404(SharedCategories, slug=slug)
wms = OGCLayer.objects.filter(categories=object)
webgis = WebGISProject.objects.filter(categories=object)
context = {
"single_object": object,
"objects": list(chain(wms, webgis)),
}
template = "shared-categories/single_shared_categories.html"
return render(request, template, context)
В представлениях используются следующие модели:
class SharedCategories(CategoryBase):
icon = models.ImageField(upload_to=settings.UPLOADED_IMAGE_FOLDER, blank=True, null=True)
is_active = models.BooleanField(default=True)
def get_absolute_url(self):
return reverse("single-sharedcategory", kwargs={"slug": self.slug})
class OGCLayer(BaseModelPost, OpenLayersMapParameters):
set_zindex = models.IntegerField(default=1)
set_opacity = models.DecimalField(max_digits=3, decimal_places=2, default=1.0)
ogc_layer_path = models.ForeignKey(GeoServerURL, related_name="related_geoserver_url", on_delete=models.PROTECT, blank=True, null=True)
ogc_layer_name = models.CharField(max_length=100)
ogc_layer_style = models.CharField(max_length=100, blank=True, null=True)
ogc_bbox = models.CharField(max_length=250, blank=True, null=True)
ogc_centroid = models.CharField(max_length=250, blank=True, null=True)
ogc_legend = models.BooleanField(default=False)
is_vector = models.BooleanField()
is_raster = models.BooleanField()
categories = models.ManyToManyField(SharedCategories, related_name="related_ogc_categories")
def get_absolute_url(self):
return reverse("ogc-single", kwargs={"slug": self.slug})
class WebGISProject(WebGISProjectBase):
categories = models.ManyToManyField(SharedCategories, related_name="related_webgisproject_categories")
basemap1 = models.ForeignKey(Basemap, on_delete=models.PROTECT, related_name="related_basemap1", blank=False, null=True)
basemap2 = models.ForeignKey(Basemap, on_delete=models.PROTECT, related_name="related_basemap2", blank=True, null=True)
basemap3 = models.ForeignKey(Basemap, on_delete=models.PROTECT, related_name="related_basemap3", blank=True, null=True)
main_layer = models.ForeignKey(OGCLayer, on_delete=models.PROTECT, related_name="related_main_wmslayer")
layers = models.ManyToManyField(OGCLayer, related_name="related_wmslayer", blank=True)
def get_absolute_url(self):
return reverse("map-single", kwargs={"slug": self.slug})
Мне нужно посмотреть в шаблоне, сколько объектов связано с list. Я знаю, что можно получить количество объектов для одной модели с помощью {{ wms.related_ogc_categories.count }}.
Но как я могу сделать то же самое в моем случае?
Ниже показано, как я использую sharedcategories_list в шаблоне:
{% for item in list %}
<div class="category-card">
<div class="category-thumbnail">
<img class="category-img" src="{{ item.icon.url }}" alt="{{ item.description }}">
</div>
<div class="category-info">
<p>{{ item.title }} <br><span class="badge">{{ item|length }}</span></p>
</div>
</div>
{% endfor %}