﻿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
19617	mixins on ModelForms	Daniele Procida	loic84	"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."	New feature	closed	Forms	dev	Normal	fixed			Accepted	1	0	0	0	0	0
