Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2013 04:16:32

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите разобраться с ManyToMany

models.py:

class topping(models.Model):
    title = models.CharField(max_length=50)
    def __unicode__(self):
        return self.title
    class Meta:
        db_table = 'test_topping'
class pizza(models.Model):
    title = models.CharField(max_length=50)
    toppings = models.ManyToManyField(topping, through='links')
    def __unicode__(self):
        return self.title
    class Meta:
        db_table = 'test_pizza'
class links(models.Model):
    topping = models.ForeignKey(topping)
    pizza = models.ForeignKey(pizza)
    date_joined = models.DateTimeField()
    invite_reason = models.CharField(max_length=64)
    class Meta:
        db_table = 'test_links'

Как правильно прикрутить .values()?
Пробую так views.py:
def test(request):
    pizzas = models.pizza.objects.all().values('title','id','toppings__title')
    return render_to_response( 'test.html', locals(), RequestContext(request) )
В шаблоне test.html
{% for pizza in pizzas %}
    {{ pizza.title }}
    {% for item in pizza.toppings.all %}
        {{ item.toppings__title }}
    {% endfor %}
{% endfor %}
Не пойму как быть, не хочется делать выборку "*"

Отредактировано quadright (Окт. 23, 2013 07:24:25)

Офлайн

#2 Окт. 23, 2013 14:12:27

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с ManyToMany

Офлайн

#3 Окт. 23, 2013 14:39:04

alrusdi
Зарегистрирован: 2013-09-30
Сообщения: 20
Репутация: +  8  -
Профиль   Отправить e-mail  

Помогите разобраться с ManyToMany

Зачем вы используете ORM там где не хочется делать выборку “*” не хочется использовать ORM?
Пишите sql запросы - ничего зазорного в этом нет.

А если все таки захотите использовать ORM, то пишите оптимально

models.pizza.objects.prefetch_related('toppings').all()
И тогда ваш цикл в шаблоне не будет делать стотыщ запросов на БД, а сделает только два Получить все пиццы, Получить все добавке к пиццам

Офлайн

#4 Окт. 24, 2013 18:02:08

quadright
Зарегистрирован: 2013-07-26
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите разобраться с ManyToMany

romankrv
С выражением и расстановкой прочитайте и вслух https://docs.djangoproject.com/en/1.5/topics/db/aggregation/#valuesдолжно помочь. I guarantee!

Читал, не нашел решения. Покажи на моём примере или только в сторону документации можешь отправлять?

Офлайн

#5 Сен. 11, 2014 13:27:21

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с ManyToMany

quadright
На сокровенные вопросы документация отвечает четко и ясно. Если не помогает, то читай еще раз.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version