如何在Django中处理和拥有两种类型的用户

时间:2018-12-20 15:15:53

标签: python django database

我正在开发一个应处理两种类型用户的项目。 普通用户和老师。

我创建了一个主要模型。实际上,我扩展了AbstractUser内置的django模型,并向其中添加了其他一些字段。额外的字段之一是is_teacher,它是BooleanField,默认值为False。对于用户注册,我从之前扩展的模型User创建了ModelForm。在注册时,我将is_teacher = False的默认值设置为指定该用户是普通用户。对于教师注册,is_teacher = True。用户和教师都可以登录并将其重定向到他们的面板,这是可以的。但是问题出在那之后。我需要其他的第三种模式。我需要在第三个模型中具有NORMAL用户和Teacher的ManyToMany字段;他们两个,但我只有一个模型。实际上,我并没有将用户和教师模型彼此分开。因此,我不知道如何指定与用户模型的ManyToMany关系和与教师的ManyToMany关系。我可以做的事情(也许)是创建两种类型的模型,一种用于用户,一种用于教师,关于这两种模型,我必须创建两个登录页面,两个配置文件和两个注册,然后也许我可以创建第三个模型就像我告诉你的那样问题是:对于用户和教师而言,有两个模型是真的吗?除此之外有什么解决办法吗?我是django的新手,请清楚地解释一下。

third_model的模型表格:

class RequestForm(forms.ModelForm):
    class Meta:
        model = ThirdModel
        fields = ("height", "age", "address")

        widgets = {
            "user": "hidden"
        }

用于在ThirdModel中保存数据的视图:

@login_required
def request_plan(request):
    form = RequestForm(request.POST or None)
    if form.is_valid():
        user = request.POST.get('username')
        form.save(commit=False)
        form.save()

    context = {
        "request_form": form
    }
    return render(request, "plan/request.html", context)


 class User(AbstractUser):
SEX_CHOICES = (
    ("male", "Male"),
    ("female", "Female")
)
sex         = models.CharField(max_length=6,    choices=SEX_CHOICES)
bio         = models.CharField(max_length=100)
is_coach    = models.BooleanField(max_length=100, default=False)

2 个答案:

答案 0 :(得分:0)

您可以为“教师”创建另一个模型,“用户”具有一个“一对一”字段,并将仅教师数据保留在该模型中。您无需使用这种方法来创建其他登录方法,登录操作可以在基本用户模型上运行,并且可以将教师模型用于教师特定的操作。

var file = path.join(__dirname, result)

res.download(file, result, function(err){
  if(err){
      console.log("err", err)
  }
})

答案 1 :(得分:0)

为什么不执行以下操作:

class ThirdModel(models.Model):
    teachers = models.ManyToManyField(User, related_name='third_model_teachers')
    normal_users = models.ManyToManyField(User, related_name='third_model_normals')

您有2个用户user1user2 您可以先添加为老师:

third_model.teachers.add(user1)
third_model.normal_users.add(user2)

在用户为老师的情况下获取所有Third_model。

user1.third_model_teachers.all()

要获得普通用户的所有Third_models

user2.third_model_normals.all()

如有任何疑问,请发表评论。