Вот модели:
class Products(models.Model):
    code = models.IntegerField(blank=True, null=True, help_text="Код товару для швидкого пошуку")
    product_name = models.CharField(max_length=200, help_text="Назва запчастини")
    group = models.ForeignKey(Groups,on_delete=models.CASCADE, blank=True, null=True, help_text="Група до якої  відноситься запчастина")
    def __str__(self):
        return self.product_name
class Connections(models.Model):
    service = models.ForeignKey(Services, on_delete=models.CASCADE, blank=True, null=True, help_text="Послуга до якої додати запчастини")
    product_item = models.ManyToManyField('Products', through='ThroughProducts')
    def __str__(self):
        return self.service.service_name
class ThroughProducts(models.Model):
    connection = models.ForeignKey(Connections, on_delete=models.CASCADE, related_name='connections')
    product = models.ForeignKey('Products', on_delete=models.CASCADE, related_name='product')
    value_product = models.IntegerField()
    def __str__(self):
        return self.connection.service.service_name
Они работают. В админке добавил несколько значений и все выводится, но я не могу в шаблоне обратиться к привязанным полям. 
Пробую следующий вариант:
<ul>
{% for connection in connections %}
   <li class="connect-service">{{ connection.service.code }}</li>
    <ul>
        {% for n_product in connection.throughproducts_set.all %}
       <li class="connect-product select-item-product" data-index="{{ n_product.id }}">{{ n_product.value_product }}<input type="checkbox" class="option-add" value="1"></li>
        {% endfor %}
    </ul>
{% endfor %}
</ul>
Ничего не выводит. В любых комбинациях, даже если есть related_name.
Следующий вариант работает:
<ul>
{% for connection in connections %}
   <li class="connect-service">{{ connection.service.code }}</li>
    <ul>
        {% for n_product in connection.product_item.all %}
            {% for item in value %}
                {% if item.product == n_product and item.connection == connection %}
                    <li class="connect-product select-item-product" data-index="{{ n_product.id }}">{{ n_product.product_name }} - {{ item.value_product }}<input type="checkbox" class="option-add" value="1"></li>
                {% endif %}
            {% endfor %}
        {% endfor %}
    </ul>
{% endfor %}
</ul>
Но в нем слишком много циклов. С большим количеством данных это неэффективно. 
Как я могу получить такой же результат, как в работающем варианте, но правильным кодом?