【发布时间】:2019-05-21 03:13:51
【问题描述】:
我正在处理一个应该处理两种类型用户的项目。 普通用户和教师。
我创建了一个主要模型。实际上我扩展了 AbstractUser 内置的 django 模型并添加了一些其他字段。额外字段之一是 is_teacher,它是 BooleanField,默认为 False。对于用户注册,我从之前扩展的模型 User 创建了 ModelForm。在注册时,我为 is_teacher = False 设置默认值以指定该用户是普通用户。对于教师注册 is_teacher = True。这对于用户和教师都可以登录并将他们重定向到他们的面板。但问题是在那之后。我需要第三个模型来做别的事情。我需要在普通用户和教师的第三个模型中有 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 个 M2M 字段有什么问题?一个给老师,另一个给正常。你预见到什么困难?
-
谢谢。正如我告诉过你的,我没有分离模型 User。我将(教师和普通)用户都保存在模型 User 中。那么如何在第三种模型中定义 M2M?我没有模型 Teacher。仅限模型用户。
-
请看下面我的解决方案。