Как наследовать внутренний класс Input в графеновой мутации Python другому внутреннему классу Input в другой мутации?

Я создаю простое приложение для работы с GraphQL запросами в бэкенде, используя Django с пакетом graphene-django. Мне нужно наследовать внутренний класс Input в мутации создания в класс Input для мутации обновления. Могу ли я сделать это каким-либо способом, и если нет, может ли кто-нибудь помочь мне решить подобную проблему, и чтобы знать, что я знаю, как ее решить, но я не хочу переписывать одно и то же поле в мутациях create и update для одной и той же модели или типа

Вот пример моего кода:

import graphene
from graphene import relay

from BoD.models import Meeting
from BoD.types.meeting import MeetingType


class CreateMeeting(relay.ClientIDMutation):
    """Mutation to create a new meeting."""

    class Input:
        created_by_id = graphene.Int(required=True)
        subject = graphene.String(required=True)
        location = graphene.String(required=True)
        date = graphene.DateTime(required=True, datetime_input=graphene.DateTime(required=True))
        start_time = graphene.Time(required=True)
        end_time = graphene.Time(required=True)

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        """Create a new meeting."""
        meeting = Meeting.objects.create(**input)
        return CreateMeeting(meeting=meeting)


class UpdateMeeting(CreateMeeting):
    """Mutation to update a meeting."""

    class Input(CreateMeeting.Input):
        id = graphene.Int(required=True)


class MeetingMutate:
    class Meta:
        abstract = True
        created_by_id = graphene.Int(required=True)
        subject = graphene.String(required=True)
        location = graphene.String(required=True)
        date = graphene.DateTime(required=True, datetime_input=graphene.DateTime(required=True))
        start_time = graphene.Time(required=True)
        end_time = graphene.Time(required=True)


class CreateMeeting(relay.ClientIDMutation):
    """Mutation to create a new meeting."""

    class Input(MeetingMutate.Meta):
        pass

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        """Create a new meeting."""
        meeting = Meeting.objects.create(**input)
        return CreateMeeting(meeting=meeting)


class UpdateMeeting(CreateMeeting):
    """Mutation to update a meeting."""

    class Input(MeetingMutate.Meta):
        id = graphene.Int(required=True)

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        """Update a meeting."""
        meeting = Meeting.objects.get(pk=input['id'])
        meeting.update(**input)
        meeting.save()
        return UpdateMeeting(meeting=meeting)

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        """Update a meeting."""
        meeting = Meeting.objects.get(pk=input['id'])
        meeting.update(**input)
        meeting.save()
        return UpdateMeeting(meeting=meeting)


Но этот код дает мне такую ошибку:

TypeError at /graphql
Cannot create a consistent method resolution
order (MRO) for bases InputObjectType, Input

Я создал этот код для решения моей проблемы, пока никто не поможет мне с этим вопросом.

Код выглядит следующим образом:

import graphene
from graphene import relay

from BoD.models import Meeting
from BoD.types.meeting import MeetingType


class MeetingInput(graphene.InputObjectType):
    created_by_id = graphene.Int(required=True)
    subject = graphene.String(required=True)
    location = graphene.String(required=True)
    date = graphene.DateTime(required=True)
    start_time = graphene.Time(required=True)
    end_time = graphene.Time(required=True)


class CreateMeeting(relay.ClientIDMutation):
    """Mutation to create a new meeting."""

    class Input:
        input = MeetingInput(required=True)

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, input):
        """Create a new meeting."""
        meeting = Meeting.objects.create(**input)
        return CreateMeeting(meeting=meeting)


class UpdateMeeting(relay.ClientIDMutation):
    """Mutation to update a meeting."""

    class Input:
        input = MeetingInput(required=True)
        id = graphene.Int(required=True)

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, input):
        """Update a meeting."""
        meeting = Meeting.objects.get(id=input.id)
        meeting.update(**input)
        meeting.save()
        return UpdateMeeting(meeting=meeting)

Нечто подобное работает в моем проекте:

class MeetingInput:
    created_by_id = graphene.Int(required=True)
    subject = graphene.String(required=True)
    location = graphene.String(required=True)
    date = graphene.DateTime(required=True)
    start_time = graphene.Time(required=True)
    end_time = graphene.Time(required=True)


class CreateMeeting(relay.ClientIDMutation):
    """Mutation to create a new meeting."""

    class Input(MeetingInput):
        pass

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        """Create a new meeting."""
        meeting = Meeting.objects.create(**input)
        return CreateMeeting(meeting=meeting)


class UpdateMeeting(relay.ClientIDMutation):
    """Mutation to update a meeting."""

    class Input(MeetingInput):
        id = graphene.Int(required=True)

    meeting = graphene.Field(MeetingType)

    @classmethod
    def mutate_and_get_payload(cls, root, info, **input):
        """Update a meeting."""
        meeting = Meeting.objects.get(id=input.pop('id'))
        meeting.update(**input)
        meeting.save()
        return UpdateMeeting(meeting=meeting)
Вернуться на верх