【发布时间】:2020-02-03 23:08:45
【问题描述】:
我刚接触 Django 两周,我被困在需要帮助的场景中。
这是一种核心概念,我为我缺乏知识提前道歉。
我已经用多个角色扩展了下面的基本用户模型。现在,每个角色对其个人资料都有不同的要求。
我需要帮助来了解如何进一步扩展Students 或Staff。有两种情况我需要扩展它们。
- 两者都可以有类似的扩展模型,如下面的地址。
-
两者都可以有不同的扩展模型,例如
Students有CurrentCourse而Staff没有。Staff有Salary模型,Students没有。class User(AbstractUser): is_student = models.BooleanField(default=True) is_staff = models.BooleanField(default=True) class Student(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, null=True) dob = models.CharField(max_length=30, blank=True) location = models.CharField(max_length=30, blank=True) class CurrentCourse(models.Model): student = models.OneToOneField(Student, on_delete=model.CASCADE) .... class Staff(models.Model): ROLES = (('Teacher', 'Teacher'), ('Professor', 'Professor'), ('Administration', 'Administration')) user = models.OneToOneField(User, on_delete=models.CASCADE, null=True) role = models.CharField(max_length=100, choices=ROLES) website = models.CharField(max_length=100, blank=True)
两种类型的用户都可以有多个地址,学生和教职员工都需要地址,不确定如何使用 ForeignKey 扩展它。
class Address(models.Model):
user = ?
street = models.CharField(max_length=200)
city = models.CharField(max_length=50)
country = models.CharField(max_length=50)
class Salary(models.Model):
staff = models.OneToOneField(Staff, on_delete=models.CASCADE)
current_salary = models.DecimalField(max_digits=10, decimal_places=2)
最后请告诉我如何在每个模型上应用验证器,例如我将“用户”子类化到所有模型而不是学生或员工。如何在 OneToOneField 上应用验证器,如下所示?我想如果我应用一个验证器,比如:
staff_validator(value):
我不能在验证器函数中调用用户,并且不确定它是全局的还是在模型内应用缩进。
class Salary(models.Model):
staff = models.OneToOneField(User, on_delete=models.CASCADE, validators=[staff_validator])
提前感谢您为此提供的帮助。
【问题讨论】:
标签: django django-models