Найти - Пользователи
Полная версия: Выборка из базы
Начало » Django » Выборка из базы
1 2
Gorazio
Всем привет. Помогите пожалуйста разобраться в следующем:
Имеются две модели для Студентов и Групп:
class Groups(models.Model):
namegr = models.CharField(max_length=25)
starosta = models.ForeignKey('Students',blank=True, null=True,related_name='Staros')
def __unicode__(self):
return '%s' % self.namegr


class Students(models.Model):
fio = models.CharField(max_length=50)
bdate = models.DateField()
tickno = models.CharField(max_length=10)
group = models.ForeignKey(Groups,blank=True, null=True,related_name='gruppa')
def __unicode__(self):
return self.fio
А так же вьюха для просмотра всех групп:
def grups(request):
grall = Groups.objects.all()
html = "<html><table border=""1""><th>Группа</th><th>Количество человек</th><th>Староста</th>"
for i in grall:
kol = len(Students.objects.filter(group=i))
html += "<tr><td><a href=""/#Здесь думаю надо разместить линк на view/> %s </a></td><td> %s </td><td> %s </td></tr>" % (i, kol, i.starosta)
html += "</table></html>"
return HttpResponse(html)
Надобно сделать так, чтобы при нажатии на название группы в этой таблице, открывалась страница со студентами этой группы. И вот как-то не могу придумать ничего, и не знаю как гуглу объяснить что я хочу.
Наперед спасибо.
svas
По коду:
лучше не формировать html во view, а сделать шаблон.
Насчет строчки:
kol = len(Students.objects.filter(group=i))
Лучше сделать так
kol = Students.objects.filter(group=i).count()
Отличия ищите в документации.
По вопросу: сделайте еще одно view где параметром будет id группы. И в таблице ссылку на это view с соответствующим id.
Gorazio
svas
По коду:
лучше не формировать html во view, а сделать шаблон.
Спасибо за совет, но мне как раз нужно именно во view.
svas
По вопросу: сделайте еще одно view где параметром будет id группы. И в таблице ссылку на это view с соответствующим id.
Примерно так я и представил себе это, но вот как такое реализовать? Не могли бы вы написать небольшой пример? А то у меня такое получается, что стыдно показывать даже;)
svas
def group_detail(request, group_id):
group = get_object_or_404(Group, pk=group_id):
students = group.students_set.all()
#далее фомируете список студентов
В urls.py
...
group/(?P<group_id>\d+)/$
...
Gorazio
Спасибо, вы мне очень помогли!
Gorazio
Опять мне нужна помощь специалистов:
Проблему я конечно решил, но вот чувствую, что не так как нужно. По совету Svas я создал вьюху для отображения студентов -
def viewGr(request):
if request.GET['id'] and 'id' in request.GET:
q = request.GET['id'].encode('utf-8')
gr = get_object_or_404(Groups, pk=q)
grst = Students.objects.filter(group=gr)
html = "<html><body>\n<table border=""1"">\n<th>Студенты группы <a href=""#"">%s</a></th><th>Студбилет №</th>\n" % gr.namegr.encode('utf-8')
for i in grst:
html += "<tr><td><a href=""/student/"">%s</a></td><td>%s</td></tr>\n" % (i, i.tickno.encode('utf-8'))
html += "</table>\n</body></html>"
return HttpResponse(html)
Id группы передаю так -
def grups(request):
grall = Groups.objects.all()
html = "<html>\n<table border=""1"">\n<th>Группа</th><th>Количество человек</th><th>Староста</th>"
for g in grall:
kol = Students.objects.filter(group=g).count()
html += "<tr><td><a href=""/grupctn/?id=%s> %s </a></td><td> %s </td><td> %s </td></tr>\n" % (g.id, g, kol, g.starosta)
html += "\n</table></html>"
return HttpResponse(html)
В Urls.py -
...
url(r'^grupctn/', viewGr),
...
Прошу помочь советами если код написан не “по-хозяйски”. Наперед спасибо.
FishHook
from django.db.models import Count
Organizations.objects.values('type').annotate(dcount=Count('type'))
>>>[{'type': 1, 'dcount': 2}, {'type': 2, 'dcount': 1}]
Gorazio
FishHook
from django.db.models import Count
Organizations.objects.values('type').annotate(dcount=Count('type'))
>>>[{'type': 1, 'dcount': 2}, {'type': 2, 'dcount': 1}]
Прошу прощения…. а что это? И как оно мне может быть полезно, я не понял.
svas
Я бы передовал id группы не как GET параметр, а в урл. Но это я думаю кому как нравится.
В строке
if request.GET['id'] and 'id' in request.GET:
поменять местами
if 'id' in request.GET and request.GET['id']:
Про получение списка студентов: почитайте https://docs.djangoproject.com/en/1.3/topics/db/queries/#related-objects
Но это тоже, кому как нравится
Прошу прощения…. а что это? И как оно мне может быть полезно, я не понял.
Это наверное про то, что при получении списка групп можно сразу же одним запросом получить количество студентов в группе
https://docs.djangoproject.com/en/1.3/topics/db/aggregation/#generating-aggregates-for-each-item-in-a-queryset
Сейчас у вас для каждой группы выполняется запрос.
Gorazio
Спасибо всем за помощь. Svas, вам отдельное спасибо за то, что разжевали)
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