Найти - Пользователи
Полная версия: Проблемы с циклом
Начало » Django » Проблемы с циклом
1 2
hulygun
Нужно получить id модели.
views.py:
item = order.item.values('distr').annotate(summ = Sum('total')).values('distr__name', 'summ', 'distr__id')
for it in item:
    d = it['distr__id']
В шаблоне вывожу так:
{% for item in item %}
    {% for d in d %}
        {{ d }}
    {% endfor %}
{% endfor %}

В итоге во всех значениях цикла получаю id последнего элемента
FishHook
hulygun
{% for item in item %}
Вас ничего тут не настораживает?
hulygun
FishHook
Вас ничего тут не настораживает?
То что одинаковые названия? Да я и с разными пробовал, один и тот же результат.
Вывожу item без цикла - получаю
[{'distr__id': 1, 'summ': 40, 'distr__name': u'name1'}, {'distr__id': 2, 'summ': 1400, 'distr__name': u'name2'}]
и все элементы выводятся без проблем. Но мне нужно получить этот id именно во вьюхе, ибо он будет использоваться в качестве аргумента
FishHook
{% for dictionary in item %}
{% for key, value in dictionary.items %}
{{ key }} = {{ value }}
{% endfor %}
{% endfor %}
hulygun
Да мне не в шаблоне нужно вывести, а во вьюхе получить значение.
FishHook
Покажи модели и объясни, что нужно получить
hulygun
models.py:
class Distr(models.Model):
    name          = models.CharField(max_length=20, verbose_name="Поставщик")
class Place(models.Model):
    place = models.CharField(max_length=255, verbose_name="Местоположение")
class Dostav(models.Model):
    distr = models.ForeignKey(Distr)
    place = models.ForeignKey(Place)
    min_sum       = models.IntegerField(max_length=10, verbose_name="Минимальная сумма заказа")
class Item(models.Model):
    name          = models.CharField(max_length=50, verbose_name="Название")
class Zakaz(models.Model):
    item         = models.ForeignKey(Item, verbose_name="Товар")
    distr        = models.ForeignKey(Distr, editable=False)
    total        = models.IntegerField(max_length=20, editable=False)
class Order(models.Model):
    item         = models.ManyToManyField(Zakaz, blank=True, verbose_name="Товар")
class Profile(models.Model):
    user         = models.ForeignKey(User, unique=True)    
    place        = models.ForeignKey(Place, blank=True, null=True)
views.py:
profile     = Profile.objects.filter(user = request.user)
    orders      = Order.objects.filter(user = request.user, check = False)
    p_place     = profile.values('place')
    dostavka    = Dostav.objects.filter(place = p_place)
    for order in orders:
        item = order.item.values('distr').annotate(summ = Sum('total')).values('distr__name', 'summ', 'distr__id')
        for it in item:
            min_summ = dostavka.filter(distr = it['distr__id'])

нужно вывести:
Order1:
Distr1 общая сумма заказа по Distr1/минимальная сумма заказа относительно Place
Distr2 общая сумма заказа по Distr2/минимальная сумма заказа относительно Place
Distr3 общая сумма заказа по Distr3/минимальная сумма заказа относительно Place

Order2:
Distr1 общая сумма заказа по Distr1/минимальная сумма заказа относительно Place
Distr2 общая сумма заказа по Distr2/минимальная сумма заказа относительно Place
Distr3 общая сумма заказа по Distr3/минимальная сумма заказа относительно Place
FishHook
min_summ = dostavka.filter(distr =Distr.objects.get(pk= it['distr__id']))
или
min_summ = dostavka.filter(distr__id = it['distr__id'])
hulygun
Так в том то и проблема, у меня всегда
it['.distr__id'] = последний id в списке
. И не пойму в чём проблема…
тоесть, если просто вывожу в шаблоне
 {{ item }}
без цикла, то выводит
 [{'distr__id': 1, 'summ': 40, 'distr__name': u'name1'}, {'distr__id': 2, 'summ': 1400, 'distr__name': u'name2'}]
нормальный список словарей. Как только
{% for i in item %} {% for min in min_summ %}{{ min.min_summ }}{% endfor %}{% endfor %}
У меня для каждого item
 it['distr__id']
равна 2 Вот и не могу понять почему так
FishHook
Запутал, то
hulygun
Да мне не в шаблоне нужно вывести, а во вьюхе получить значение.
теперь ты опять шаблон показываешь
hulygun
{% for i in item %} {% for min in min_summ %}{{ min.min_summ }}{% endfor %}{% endfor %}
В item у тебя список словарей.
ты делаешь по нему фор {% for i in item %},
то есть в каждый i у тебя попадет словарь вида {'distr__id': 1, ‘summ’: 40, ‘distr__name’: u'name1'}, откуда там “min_summ”?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB