class DocumentGroup(models.Model):
title = models.CharField(u'Название группы', max_length=255)
number = models.CharField(u'Номер группы', max_length=3)
def __unicode__(self):
return u'%s %s' % (self.number, self.title)
class Document(models.Model):
group = models.ForeignKey(DocumentGroup)
number = models.CharField(u'Номер документа в группе', max_length=3)
title = models.CharField(u'Название документа', max_length=255)
def __unicode__(self):
return u'%s.%s %s' % (self.group.number, self.number, self.title)
class DocumentForm(forms.Form):
id = forms.IntegerField(widget=forms.HiddenInput, required=False)
documents = forms.ModelMultipleChoiceField(queryset = Document.objects.none(), widget=CheckboxSelectMultipleGroups,
required=False, label=u'Документы')
services = forms.ModelMultipleChoiceField(queryset = Service.objects.all(), widget=forms.MultipleHiddenInput)
categories = forms.ModelMultipleChoiceField(queryset = Category.objects.all(), widget=forms.MultipleHiddenInput)
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=forms.util.ErrorList, label_suffix=':',
empty_permitted=False):
super(DocumentForm, self).__init__(data, files, auto_id, prefix,
initial, error_class, label_suffix,
empty_permitted)
services = None
if data:
services = data.getlist('services')
if initial:
services = initial['services']
if services:
self.fields[u'documents'].queryset = Document.objects.filter(service__in=services).distinct()
Так вот. При отображении этой формы идет, как и положено, запрос в БД, соответствующий
Document.objects.filter(service__in=services).distinct()
А затем еще по одному запросу к таблице DocumentGroup на каждую отобранную запись. В первом запросе все необходимые данные уже отобраны. Зачем Django делает лишнюю работу?
Быть может, я как-то неправильно использовал какие-то классы? Тогда поправьте меня. Или подскажите, как избавиться от этой кучи лишней работы.