Models.E005 Поле 'xxx' из родительской модели 'x.x' конфликтует с полем 'xxx' из родительской модели

Ошибка наследования Django: (models.E005)

Есть ли у вас решение, как обойти эту проблему, есть ли способ добавить префикс, потому что у меня должно быть несколько пользователей с одинаковым наследием?

Django не нравится это:

class Dispositif(Infos, ChefGO, ADJChefGO):

bcs ChefGO и ADJChefGO зависят от одного класса Member, но мне действительно нужно два члена

class Members(models.Model):
    phone_regex = RegexValidator(regex=r'^[0-9]{10}$', message="Error: Format 0611223344")
    indicative = models.CharField(max_length=16, default="Default indicative")
    phone = models.CharField(max_length=10, validators=[phone_regex])

    class Meta:
        abstract = True


class ChefGO(Members):
    pass


class ADJChefGO(Members):
    pass


class Dispositif(Infos, ChefGO, ADJChefGO):
    name = models.CharField(max_length=32, default="Name")
    place = models.CharField(max_length=64)
    start_date = models.DateTimeField(default=datetime.datetime.now)
    end_date = models.DateTimeField(default=datetime.datetime.now)


Спасибо

Являются ли внешние ключи обходным решением?

    # model
    class Dispositif(Infos):
        myChefGO = models.ForeignKey(ChefGO, on_delete=models.CASCADE)
        myADJChefGO = models.ForeignKey(ADJChefGO, on_delete=models.CASCADE)
    # instanciation
    dispositif = Dispositif(Infos)
    dispositif.myChefGO = A
    dispositif.myADJChefGO = B

Я нашел решение с помощью этого метода:

1- Создайте класс "Устройство" с 'Fields' и 'Forms'

class Device:
    @staticmethod
    class Fields:

        @staticmethod
        class Member:
            @staticmethod
            def indicative():
                return models.CharField(max_length=16, default="Default indicative")

            @staticmethod
            def phone():
                phone_regex = RegexValidator(regex=r'^[0-9]{10}$', message="Error: Format 0611223344")
                return models.CharField(max_length=10, validators=[phone_regex])

            @staticmethod
            def function():
                return models.CharField(max_length=10)

    @staticmethod
    class Forms:

        @staticmethod
        class Member:
            @staticmethod
            def indicative():
                return django.forms.TextInput(attrs={'placeholder': 'indivatif'})

            @staticmethod
            def phone(placeholder="06 12 34 56 78"):
                return django.forms.TextInput(attrs={'placeholder': placeholder})

            @staticmethod
            def function():
                return django.forms.TextInput(attrs={'placeholder': 'fonction'})

2- Используйте поля 'Device' следующим образом

class ChefGO(models.Model):
    cgo_indicative = Device.Fields.Member.indicative()
    cgo_phone = Device.Fields.Member.phone()
    cgo_function = Device.Fields.Member.function()

    class Meta:
        abstract = True


class ADJChefGO(models.Model):
    adjcgo_indicative = Device.Fields.Member.indicative()
    adjcgo_phone = Device.Fields.Member.phone()
    adjcgo_function = Device.Fields.Member.function()

    class Meta:
        abstract = True

3- Наследование

class Dispositif(ChefGO, ADJChefGO):
    pass

4- "Бонус". Вы можете использовать'его в ModelForm следующим образом:

class DispositifForm(ModelForm):
    class Meta:
        model = Dispositif
        
        fields = [
                    'cgo_phone', 'cgo_indicative', 'cgo_function',
                    'adjcgo_phone', 'adjcgo_indicative', 'adjcgo_function',
                    'dso_phone', 'dso_indicative', 'dso_function'
                ]
        
        widgets = {
            'cgo_phone': Device.Forms.Member.phone(),
            'cgo_indicative': Device.Forms.Member.indicative(),
            'cgo_function': Device.Forms.Member.function(),
            
            'adjcgo_phone': Device.Forms.Member.phone(),
            'adjcgo_indicative': Device.Forms.Member.indicative(),
            'adjcgo_function': Device.Forms.Member.function(),
            
            'dso_phone': Device.Forms.Member.phone(),
            'dso_indicative': Device.Forms.Member.indicative(),
            'dso_function': Device.Forms.Member.function()
        }
Вернуться на верх