Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 3, 2012 07:57:22

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с циклом

Нужно получить 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 последнего элемента

Офлайн

#2 Дек. 3, 2012 08:09:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблемы с циклом

hulygun
{% for item in item %}
Вас ничего тут не настораживает?



Офлайн

#3 Дек. 3, 2012 08:40:00

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с циклом

FishHook
Вас ничего тут не настораживает?
То что одинаковые названия? Да я и с разными пробовал, один и тот же результат.
Вывожу item без цикла - получаю
[{'distr__id': 1, 'summ': 40, 'distr__name': u'name1'}, {'distr__id': 2, 'summ': 1400, 'distr__name': u'name2'}]
и все элементы выводятся без проблем. Но мне нужно получить этот id именно во вьюхе, ибо он будет использоваться в качестве аргумента

Отредактировано hulygun (Дек. 3, 2012 08:41:44)

Офлайн

#4 Дек. 3, 2012 08:45:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблемы с циклом

{% for dictionary in item %}
{% for key, value in dictionary.items %}
{{ key }} = {{ value }}
{% endfor %}
{% endfor %}



Офлайн

#5 Дек. 3, 2012 09:23:46

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с циклом

Да мне не в шаблоне нужно вывести, а во вьюхе получить значение.

Офлайн

#6 Дек. 3, 2012 10:09:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблемы с циклом

Покажи модели и объясни, что нужно получить



Офлайн

#7 Дек. 3, 2012 10:28:05

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с циклом

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

Офлайн

#8 Дек. 3, 2012 10:50:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблемы с циклом

min_summ = dostavka.filter(distr =Distr.objects.get(pk= it['distr__id']))
или
min_summ = dostavka.filter(distr__id = it['distr__id'])



Офлайн

#9 Дек. 3, 2012 11:03:16

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблемы с циклом

Так в том то и проблема, у меня всегда

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 Вот и не могу понять почему так

Офлайн

#10 Дек. 3, 2012 11:12:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблемы с циклом

Запутал, то

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”?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version