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. {{{ }}} 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