0
votes

Champ optionnel sur la classe de base mais obligatoire sur la classe enfant à Django

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'.


0 commentaires

3 Réponses :


0
votes

Vous pouvez remplacer les propriétés de terrain. Gardez la personne email comme d'habitude. Changer l'utilisateur e-mail par xxx


0 commentaires

0
votes

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


0 commentaires

0
votes

Lorsque vous faites Héritage Multi modèle , alors l'enfant crée un Relation OneOne au modèle parent, donc dans le modèle d'enfant, les champs (dans votre cas email ) de parent n'existe pas (base de données sage). Donc, dans cette approche, vous ne pouvez pas faire de champ de messagerie pas null .

Il est donc préférable de déclarer une classe abstraite de base. Puis sous-classe les deux personne et utilisateur à partir de là. Par exemple: xxx


0 commentaires