Найти - Пользователи
Полная версия: помогите добавить поле в ORM запрос
Начало » Django » помогите добавить поле в ORM запрос
1
qman
Всем привет,
есть модель (часть model.py)
from django.db import models
from django.contrib.auth.models import User

class Publisher(models.Model):
name = models.CharField(max_length=30, verbose_name='Название')
address = models.CharField(max_length=50, verbose_name='Адрес')
city = models.CharField(max_length=60, verbose_name='Город')
state_province = models.CharField(max_length=30, \
verbose_name='Область')
country = models.CharField(max_length=50, \
verbose_name='Государство')
#website = models.URLField(verbose_name='Адрес сайта')

class Admin:
pass

def __unicode__(self):
return self.name

class Meta:
ordering = ['name']

class Author(models.Model):
salutation = models.CharField(max_length=10)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='e-mail')
#headshot = models.ImageField(upload_to='/tmp')
class Admin:
pass
def __unicode__(self):
return '%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
title = models.CharField(max_length=100, verbose_name='Название')
authors = models.ManyToManyField(Author, verbose_name='Автор')
publisher = models.ForeignKey(Publisher, verbose_name='Издательство')
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
rating = models.FloatField()

publication_date = models.DateField(blank=True, null=True,\
verbose_name='Дата издания')
class Admin:
pass
def __unicode__(self):
return self.title

class OrderDetail (models.Model):
title = models.CharField(max_length=100, verbose_name='Заявка')
date_order = models.DateField(blank=True, null=True, \
verbose_name='Дата заказа')
class Admin:
pass
def __unicode__(self):
return self.title

class Order(models.Model):
book = models.ForeignKey(Book, verbose_name='Книга')
count = models.PositiveIntegerField(verbose_name='Кол-во')
title = models.ForeignKey(OrderDetail, verbose_name='Название заказа')
user = models.ForeignKey(User)
class Admin:
pass
def __unicode__(self):
return u'%s' % self.book
Представление списка книг в заявке
def order_edit(request, order_id):
print "author_add %s"%order_id
if order_id:
order_detail = get_object_or_404(OrderDetail, pk=order_id)
user = get_object_or_404(User, pk = request.user.id)#текущий пользователь
books = order_detail.order_set.filter(user = user).order_by('book')
q = books.aggregate(itogo=Sum('count'))
book_itogo = books.values('book').annotate(count=Sum('count'))
return render_to_response('books/books_list.html', {'books': books, \
'count_book': q['itogo'], 'book_itogo': book_itogo })
Переменная book_itogo- это заявка книг, которая состоит из

где
book - Book.id книги
count - кол-во книг я заявке
Подскажите как добавить в эту переменную название книги , т.е. Book.title?
чтобы получить что то типа

P.S. всем спасибо за любые предложения
qman
с помошью ORM решить не смог. Решил таким образом:
def order_edit(request, order_id):
"""Форма списка книг в заявке"""
print "author_add %s"%order_id
if order_id:
order_detail = get_object_or_404(OrderDetail, pk=order_id)
user = get_object_or_404(User, pk = request.user.id)#текущий пользователь
book_in_order = order_detail.order_set.filter(user = user).order_by('book')
book_all = Book.objects.all()# все книги для отображения итого
q = book_in_order.aggregate(itogo=Sum('count'))
#итого книг требуется заказать
book_itogo = book_in_order.select_related().values('book').annotate(count=Sum('count'))
book_zayavka = []#добавляем название книг в заявку
for m in book_itogo:
rec = {}#строка заявки
rec['book_name'], rec['count'] = book_all[m['book']-1], m['count']
book_zayavka.append(rec)
return render_to_response('books/books_list.html',\
{'book_in_order': book_in_order, 'count_book': q['itogo'],\
'book_itogo': book_zayavka})
Кто либо сможет предложить как оптимизировать код выше?
P.S. шаблон
{% include 'nav.html' %}
<a href="add/">Добавить</a>
<table border = "1">
{% for book in book_in_order%}
{% if forloop.first %}
<tr>
<td>Книга</td>
{% if book.count %}<td>Кол-во</td>
{% endif %}
<td>Удалить</td></tr>
{% endif %}
<tr>
<td><a href="edit/{{book.id}}/" TITLE="Щелкните, чтобы редактировать {{book}}">
{{ book }}</a></td>
{% if book.count %}<td>{{ book.count }}</a></td>{% endif %}
<td><a href="delete/{{book.id}}/" TITLE="Щелкните, чтобы удалить {{book}}">X</td>
</tr>
{% endfor %}
</table>
<p>Позиций заказано {{ book_in_order|length }}.</p>
<p>Всего книг заказано {{ count_book }}.</p>
Итого ваш заказ:
<table border = "1">
<tr>
<td>Книга</td>
<td>Кол-во</td>
</tr>
{% for book in book_itogo%}
<tr>
<td>{{ book.book_name }}</td>
<td>{{ book.count }}</td>
</tr>
{% endfor %}
</table>
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