Django继承错误:(models.E005)
您有没有解决这个问题的解决方案,是否有方法添加前缀或idk,因为我必须有几个具有相同传统的用户?
Django不喜欢这样:
类配置f(Infos,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)谢谢
发布于 2021-08-17 23:15:34
我用这种方法找到了解决办法:
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 = True3-继承
class Dispositif(ChefGO, ADJChefGO):
pass4-“奖励”--你可以在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()
}发布于 2021-08-17 17:16:58
外键能解决这个问题吗?
# 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 = Bhttps://stackoverflow.com/questions/68821365
复制相似问题