django - models.E005 父模型 'xx' 中的字段 'xxx' 与父模型中的字段 'xxx' 冲突
问题描述
Django 继承错误:(models.E005)
你有解决这个问题的解决方案吗,有没有办法添加前缀或 idk,因为我必须有几个具有相同遗产的用户?
Django 不喜欢这样:
类 Dispositif(信息,ChefGO,ADJChefGO):
bcs ChefGO 和 ADJChefGO 依赖于同一个类成员,但我真的需要两个成员
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)
谢谢
解决方案
我用这种方法找到了解决方案:
1-使用“字段”和“表单”创建“设备”类
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-使用这样的“设备”字段
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()
}
推荐阅读
- javascript - 偏移量和鼠标事件 pageX 和 Y 正在添加像素
- laravel - 无法在 laravel 中使用 Appserviceprovider 添加刀片组件
- vb.net - 如何从继承的winform中删除字形
- react-native - 创建一个可感知放置事件的可放置组件
- javascript - 如何在javascript中为每个onchange更改字体粗细
- selenium - 使用 Selenium 抓取 React 表
- mongodb - 查找嵌入式文档 ID
- spring-boot - 保护每个微服务
- go - 我们如何管理在 Kafka Confluent Golang 中运行多个进程的应用程序的事务 ID?
- oracle-apex - 评估类型开关并执行操作