Простой, хотя, возомжно, и кривоватый, способ для уменьшения запросов к базе при формировании формы с хитрыми полями через m2m поля.
у модели, например:
class Part(models.Model):
name = models.CharField()
prod = models.ForeignKey()
rests = models.ManyToManyField()
def __unicode__(self):
r_string = u''
for a in self.rests.all():
r_string = r_string + (u' %s' % a.warehouse.city) + u':' + str(a.rest)+' '
return u'%s от %s, %s' % (self.name, self.prod, r_string)
Если просто отдать, то получится много-много запросов, особенно учитывая, что self.prod - это тоже FK.
Для их простого уменьшения в форме достаточно прописать:
def __init__(self, *args, **kwargs):
super(NewPOrderForm, self).__init__(*args, **kwargs)
qs = Part.objects.prefetch_related('rests', 'prod', 'rests', 'rests__warehouse', 'prod__country_y').filter(selling=True)
self.fields['part'].queryset = qs
Решение для меня было не очевидным, потому выкладываю сюда.