首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自父模型'x.x‘的字段'xxx’与父模型中的'xxx‘字段冲突

来自父模型'x.x‘的字段'xxx’与父模型中的'xxx‘字段冲突
EN

Stack Overflow用户
提问于 2021-08-17 17:01:21
回答 2查看 141关注 0票数 0

Django继承错误:(models.E005)

您有没有解决这个问题的解决方案,是否有方法添加前缀或idk,因为我必须有几个具有相同传统的用户?

Django不喜欢这样:

类配置f(Infos,ChefGO,ADJChefGO):

bcs ChefGO和ADJChefGO依赖于同一个类成员,但我确实需要两个成员。

代码语言:javascript
复制
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)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-17 23:15:34

我用这种方法找到了解决办法:

1-用“字段”和“窗体”创建“设备”类

代码语言:javascript
复制
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-像这样使用“设备”字段

代码语言:javascript
复制
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-继承

代码语言:javascript
复制
class Dispositif(ChefGO, ADJChefGO):
    pass

4-“奖励”--你可以在ModelForm中这样使用它:

代码语言:javascript
复制
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()
        }
票数 0
EN

Stack Overflow用户

发布于 2021-08-17 17:16:58

外键能解决这个问题吗?

代码语言:javascript
复制
    # model
    class Dispositif(Infos):
        myChefGO = models.ForeignKey(ChefGO, on_delete=models.CASCADE)
        myADJChefGO = models.ForeignKey(ADJChefGO, on_delete=models.CASCADE)
代码语言:javascript
复制
    # instanciation
    dispositif = Dispositif(Infos)
    dispositif.myChefGO = A
    dispositif.myADJChefGO = B
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68821365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档