【发布时间】:2018-09-29 10:36:58
【问题描述】:
我有一个 Django 应用程序,我在其中扩展了用户模型。 (见下文)。我有一种类型的用户,它有 3 个属性 - 电子邮件、全名和头像。我将拥有多种类型的用户。也许是老师、学生、家长、校友等(不是我的领域,而是一个例子)。我是否应该将它们共同的字段放在用户模型下面,然后创建一个具有 4 个不共享属性的模型(例如,您教的年级,或在校的年份,毕业的年份?我正在编造这个在飞行中,但你明白我的意思)用外键加入他们。我正在尝试扩展 this page 。我不确定related_name arg 是什么意思。
class Teach(AbstractBaseUser):
user = models.ForeignKey(User, related_name='teacher')
classes = models.EmailField(...)
year_started_teaching = models..
class Student(AbstractBaseUser):
user = models.ForeignKey(User, related_name='teacher')
year_graduating = models.Integer()
class User(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True, null=True)
avatar = models.ImageField(upload_to='images/', blank=True)
is_active = models.BooleanField(default=True) # can login
staff = models.BooleanField(default=False) # staff user non superuser
admin = models.BooleanField(default=False) # superuser
timestamp = models.DateTimeField(auto_now_add=True)
或者我应该有 4 个独立的模型,每个模型都有用户。在某个时候,我将列出我想要过滤的所有用户的列表,因此我认为拥有主模型和模型。
class Teach(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True,
classes = models.EmailField(...)
year_started_teaching = models..
class Student(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True)
year_graduating = models.Integer(...)
我很确定我不应该只有一个带有标志的模型来表示用户类型。
【问题讨论】:
-
我认为第二种选择要好得多。您可以通过
M2M关系与学生和老师联系
标签: django python-3.x web