#19617: mixins on ModelForms -------------------------------+-------------------- Reporter: EvilDMP | Owner: nobody Type: Uncategorized | Status: new Component: Uncategorized | Version: 1.4 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------+-------------------- At present, this sort of thing is not possible:
{{{ # define a reusable mixin for ModelForms InputURLMixin(object): input_url = forms.CharField(max_length=255, required = False, help_text=u"<strong>External URL</strong> not found above? Enter a new one.", ) # the form class LinkItemForm(InputURLMixin, forms.ModelForm): [...] # the admin class class PluginInlineLink(admin.StackedInline): form = LinkItemForm [...] fieldsets = # if fieldsets contains "input_url": "Unknown field(s) (input_url) specified" }}} In other words, it's not possible for a `ModelForm` to inherit from a `Mixin(object)` or indeed `Mixin(Form)`. In the former case, the `Mixin(object)` fails the test in `forms.ModelFormMetaclass.__new__()` that would allow it to be treated as a parent worth inheriting from, so the attributes set on it are ignored when the subclass is created. In the latter case, the metaclasses conflict in ways I don't fully understand. The docs https://docs.djangoproject.com/en/dev//topics/forms/modelforms/#form- inheritance simply remark "For technical reasons, a subclass cannot inherit from both a ModelForm and a Form simultaneously". It doesn't seem possible to give the putative mixin class the metaclasses it needs manually to solve this (e.g. `__metaclass__ = DeclarativeFieldsMetaclass` or `__metaclass__ = ModelFormMetaclass`. One solution might be to provide a FormMixin base class for mixins to inherit from. Another might be to make `forms.ModelFormMetaclass.__new__()` less discriminating, and allow `get_declared_fields()` to look at attributes of classes that are not only ModelForms. -- Ticket URL: <https://code.djangoproject.com/ticket/19617> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.