Skip to content

Probable issue on proxy submodels and polymorphic inlines #256

@marcoooo

Description

@marcoooo

Hi, I am facing a problem with my polymorphic inlines:
Here is my class hierarchy:

class BaseParam(PolymorphicModel):
    somefields...
    submission = models.ForeignKey(....)
class TextParam(BaseParam):
    """ Standard text input """
    class Meta:
        proxy = True

class BooleanParam(BaseParam):
    ...concrete subclass
class DecimalParam(BaseParam):
    ...concrete subclass
class IntegerParam(BaseParam):
    ...concrete subclass
class ListParam(BaseParam):
    ...concrete subclass
class FileInput(BaseParam):
    ...concrete subclass

I used in the "SubmissionAdmin" polymorphic inlines as follow:

class PolymorphicInputInlineChild(StackedPolymorphicInline.Child):
    ...just override formfield_for_foregeinley for another relation field in main BaseParam class


class SubmitInputsInline(StackedPolymorphicInline, CompactInline):
    class BooleanParamInline(PolymorphicInputInlineChild):
        model = BooleanParam
        exclude = ['order']
        classes = ['collapse']

    class ListParamInline(PolymorphicInputInlineChild):
        model = ListParam
        exclude = ['order']

    class DecimalParamInline(PolymorphicInputInlineChild):
        model = DecimalParam
        exclude = ['order']

    class IntegerParamInline(PolymorphicInputInlineChild):
        model = IntegerParam
        exclude = ['order']

    class TextParamInline(PolymorphicInputInlineChild):
        model = TextParam
        exclude = ['order']

    class FileInputInline(PolymorphicInputInlineChild):
        model = FileInput
        exclude = ['order']

    model = BaseParam
    exclude = ['order']
    verbose_name = "Param"
    verbose_name_plural = "Params"
    classes = ['collapse', ]
    child_inlines = (
        TextParamInline,
        FileInputInline,
        BooleanParamInline,
        ListParamInline,
        IntegerParamInline,
        DecimalParamInline,
    )
    list_display_links = None
    list_display = ('name', '__class__', 'default')

And finally my main modelAdmin:

class ServiceSubmissionAdmin(PolymorphicInlineSupportMixin, WavesModelAdmin):
    """ Submission process administration -- Model Submission """
    class Media:
        ...
    inlines = [
        SubmitInputsInline,
        ... other non polymorphic inlines
    ]

For all non-proxy subclasses, everything works well, but in case I wan to add a TextParam, upon save I got this error:

ValidationError at /admin/waves/submission/1/change/
[u"Child model type <class 'waves.models.inputs.BaseParam'> is not part of the formset"]

Is this a configuration issue ? Am I missing an important point ? of should I replace model class in TextParam Inline to BaseParam, and lost possibilyt to filter my future queryset for this sub-class ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions