﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
18172	ModelForm fails to generate proper ModelMultipleChoiceField when using iterable model	eric.olstad@…	nobody	"When using default admin forms for a model with a ManyToManyField to an iterable model (defines {{{__iter__}}}), the select control generated will have options that have list values instead of the primary key on the model.

Example:

{{{
class MyIterableModel(models.Model):
   def __iter__(self):
      for item in self.items:
         yield item

class MyItem(models.Model):
   owner = models.ForeignKey(MyIterableModel, related_name=items)

class MyOtherModel(models.Model):
   myiterables = model.ManyToManyField(MyIterableModel)
}}}

In the admin:

{{{
admin.site.register(models.MyOtherModel)
}}}

When viewing the MyOtherModel page in the admin, the control for the ManyToManyField will have lists of primary keys as each option value.

{{{
<select multiple=""multiple"" name=""myiterablemodels"" id=""id_myiterablemodels"">
   <option value=""[35636, 35383]"">Yada Yada</option>
</select>
}}}

This of course generates ""not a valid value for primary key"" when submitting.

This is because django/forms/models.py prepare_value returns a list.
{{{
1035	    def prepare_value(self, value):
1036	        if hasattr(value, '__iter__'):
1037	            return [super(ModelMultipleChoiceField, self).prepare_value(v) for v in value]
1038	        return super(ModelMultipleChoiceField, self).prepare_value(value)
}}}

I'm not sure why prepare_value returns a list in that case, so I don't have suggestions for a fix.  The workaround is to not use iterable models."	Bug	closed	Forms	dev	Normal	fixed		m.r.sopacua@… patrys@… bruscoob@…	Accepted	0	0	0	0	0	0
