首页 > 解决方案 > 创建用户相关信息模型

问题描述

我想创建像 coursera.org 这样的网站。所以我需要创建两个用户类型,比如学生和教师。最好的方法是什么?

我尝试在models.py 中手动创建用户类型并预定义用户类型。但是用户类型没有显示在管理页面中。我做错了什么?

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Usertype(models.Model):
    user = models.ForeignKey(User,related_name = 'Usertype')
    usertype = ('Student','Teacher')

标签: pythondjango

解决方案


您需要创建usertype某个字段,例如CharField设置choices[Django-doc]的位置,例如:

from django.db import models
from django.contrib.auth.models import User

USERTYPE_CHOICES = (
    ('S', 'Student'),
    ('T', 'Teacher')
)

class Usertype(models.Model):
    user = models.ForeignKey(User,related_name = 'Usertype')
    usertype = models.CharField(max_length=1, choices=USERTYPE_CHOICES)

请注意,您可能想要制作ForeignKeya OneToOneField[Django-doc]来避免Usertype为同一个User.

还建议使用get_user_model[Django-doc]而不是直接引用User模型,因为这样可以更方便地更改用户模型,例如:

from django.db import models
from django.contrib.auth import get_user_model

USERTYPE_CHOICES = (
    ('S', 'Student'),
    ('T', 'Teacher')
)

class Usertype(models.Model):
    user = models.OneToOneField(get_user_model(), related_name='Usertype')
    usertype = models.CharField(max_length=1, choices=USERTYPE_CHOICES)

在您的app/admin.py中,您还需要“注册”您的模型,以便它显示在管理站点中:

# app/admin.py

from django.contrib import admin
from app.models import Usertype

admin.site.register(Usertype)

推荐阅读