I would definitely agree that the form sets should be smart enough to not query it so many times. I have run into this many times. I ended up doing something this:
class TestFormset(BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(TestFormset,self).__init__(*args, **kwargs)
awesome_models = AwesomeModel.objects.all()
for form in self.forms:
form.fields['awesome_model'].choices = [('', '--------')] + [(x.pk, x.name) for x in awesome_models]
This basically just runs one query, then manually setting the choices the particular field for each form in the form set.