我已经找到了这个方法的解决方案:
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()
}