django外键关系

时间:2018-10-26 10:36:31

标签: python django

models.py

class Hub(models.Model):
    name = models.CharField(max_length=150)

    def __str__(self):
        return self.name


class User(AbstractUser):
    is_client = models.BooleanField(default=False)
    is_trainer = models.BooleanField(default=False)
    username = models.CharField('username', max_length=150, unique=True)
    email = models.EmailField(unique=True)
    hub = models.ForeignKey(Hub, on_delete=models.CASCADE, blank=True, null=True)
    hub_position = models.CharField(max_length=150, default="")
    mentor = models.ForeignKey('self', on_delete=models.CASCADE, blank=True,null=True)
    terms = models.BooleanField(blank=True, default=False)
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', 'terms']

    def get_absolute_url(self):
        return reverse('student:dashboard', kwargs={'pk': self.pk})

对此处如何设计模型感到困惑。每个用户可以完全属于一个集线器。一个集线器有一个领导者,许多excom和许多成员,所有这些都属于User。这些集线器是从管理端添加的。领导者可以接受来自excoms和成员的集线器加入请求。 >

1 个答案:

答案 0 :(得分:0)

我会将用户位置作为choice field添加到User,以便在Admin中看到一个不错的选择框。

class User(AbstractUser):
    USER_POSITIONS = ((0, 'Regular'), (1, 'Leader'), (2, 'Excom'))

    hub = models.ForeignKey(Hub, on_delete=models.CASCADE, blank=True, null=True)
    hub_position = models.IntegerField(default=0, choices=USER_POSITIONS, ...)