1

私は奇妙な問題を抱えています.モデルの階層、抽象ユーザークラスがあります:

class User(AbstractBaseUser):
    user_name = models.CharField(max_length=32, unique=True)
    email = models.EmailField(max_length=255, unique=True, null=True)
    phone = PhoneNumberField()
    access_token = models.CharField(max_length=255, unique=True, null=True)
    notifications_token = models.CharField(max_length=255, unique=True, null=True)
    photo = models.ImageField(null=True)
    person_in_contact = models.CharField(max_length=32, null=True)
    active = models.BooleanField(default=False)
    confirmedEmail = models.BooleanField(default=False)
    confirmedPhone = models.BooleanField(default=False)
    completedProfile = models.BooleanField(default=False)
    visible = models.BooleanField(default=True)

    @property
    def is_active(self):
        return self.active

    # def __str__(self):
    #     return "Client : " + self.user_name + " Email:" + self.email

    def get_email(self):
        return self.email

    USERNAME_FIELD = 'user_name'

    REQUIRED_FIELDS = ['user_name', 'phone', 'password']

    class Meta:
        abstract = True

次に、このクラスから継承する person クラスと company (これは問題ありません) クラス:

class Person(User):
    GENDER = (('F', 'FEMALE'), ('M', 'MALE'))

    name = models.CharField(max_length=50, null=True)
    surname = models.CharField(max_length=50, null=True)
    adress = models.CharField(max_length=255, null=True)

    birth_date = models.DateField(null=True)
    gender = models.CharField(max_length=1, choices=GENDER, null=True)
    age = models.IntegerField(null=True)

    def age(self):
        today = date.today()
        return today.year - self.birth_date.year

    # def __str__(self):
    #     return super().__str__() + " Name : " + self.name

    class Meta:
        abstract = True

ご覧のとおり、IntegerField() である唯一のフィールドは age フィールドです。今、私は人のクラスから継承するトラベラーとドライバーのクラスを持っています。問題は年齢フィールドです。クラスの1つでそれをオーバーライドしない限り、データベースに表示されません。 traveler であるため、データベースには表示されましたが、ドライバーで上書きされなかったため、表示されませんでした。旅行者:

class Traveller(Person):
    photo = models.ImageField(null=True, upload_to='travellers/profile_pictures')
    age = models.IntegerField(null=True)

    class Meta:
        verbose_name_plural = 'Travellers'

運転者:

class Driver(Person):
    rating = models.DecimalField(default=0, decimal_places=1, max_digits=3)
    driving_license = models.CharField(max_length=50, null=True)
    insurance_number = models.CharField(max_length=50, null=True)
    company = models.ForeignKey(TransportCompany, on_delete=models.DO_NOTHING, null=True)
    photo = models.ImageField(null=True, upload_to='drivers/profile_pictures')

これを修正する方法、または何が問題なのかを知る必要があります。

4

1 に答える 1