J'aimerais savoir si son possible d'avoir 2 classes (base = personne et enfant = utilisateur) où j'ai une propriété (e-mail) nullable sur la base, mais il doit être défini pour la classe enfant
django.core.exceptions.FieldError: Local field 'email' in class 'User' clashes with field of the same name from base class 'Person'.
3 Réponses :
Vous pouvez remplacer les propriétés de terrain.
Gardez la personne email code> comme d'habitude.
Changer l'utilisateur
e-mail code> par
Vous devez ajouter Classe méta: abstrait = true code> (Remarque: et n'utilisez pas
null code> dans le champ de caractère, utilisez
vide code>. .) ::
IE:
class Human(models.Model):
name = models.CharField(max_length=60, )
identification = models.CharField(max_length=20, unique=True)
email = models.CharField(max_length=60, blank=True)
class Meta:
abstract = True
class Person(Human):
def __str__():
return self.name
class User(Human):
email = models.CharField(max_length=60 ) #<~~~~ Email CAN'T be null
Lorsque vous faites Héritage Multi modèle A >, alors l'enfant crée un Relation OneOne au modèle parent, donc dans le modèle d'enfant, les champs (dans votre cas Il est donc préférable de déclarer une classe abstraite de base. Puis sous-classe les deux email code>) de parent n'existe pas (base de données sage). Donc, dans cette approche, vous ne pouvez pas faire de champ de messagerie
personne code> et
utilisateur code> à partir de là. Par exemple: p>