【发布时间】:2022-01-23 20:21:16
【问题描述】:
我有一个用户模型和一个教师模型,如下所示 必须先创建用户模型,然后创建教师模型,并将用户作为对象(ForeignKey)。
用户模型
class User(AbstractUser):
'''
Class to store details of Users
Attribs:
username (str):User name.
role_options (str): Options for role
role (str):Whether "Admin" or "Teacher".
email (str):User email id.
parent_id (obj):Self foreign key field to store creator id.
staff (bool):If Staff
admin (bool):If admin
'''
username=models.CharField(
max_length=100,default="Unknown",null=True,blank=True)
role_options = [
('Admin','Admin'),
('Teacher','Teacher'),
('Student','Student')
]
role = models.CharField(
choices=role_options,max_length=40,
null=True,blank=True)
email=models.EmailField(max_length=100,unique=True)
parent_id = models.ForeignKey(
'self',related_name="parent_admin",
on_delete=SET_NULL,null=True,blank=True)
staff = models.BooleanField(default=False,null=True)
admin = models.BooleanField(default=False,null=True)
USERNAME_FIELD='email'
REQUIRED_FIELDS=[]
objects=UserManager()
def get_username(self):
return self.email
@property
def is_staff(self):
return self.staff
@property
def is_admin(self):
return self.admin
教师模式
class Teacher(models.Model):
"""
Class to store Teacher details.
Attribs:
fullname (str): Fullname of Teacher.
email (Obj): Email Id of Teacher
address (str): Address of Teacher
joining_date (str): School joining date
qualification (str): Qualification of Teacher
"""
fullname=models.CharField(max_length=100,null=True,blank=True)
email=models.OneToOneField(
User,related_name="Teacher",on_delete=CASCADE,null=True,blank=True)
address = models.CharField(
max_length=200,default="Unknown",null=True,blank=True)
joining_date = models.DateField(
null=True,default=timezone.now,blank=True)
qualification = models.CharField(max_length=40,null=True,blank=True)
我已经创建了一个用于创建用户的序列化程序,如下所示
class UserSerializer(serializers.ModelSerializer):
"""Serializer for creating user."""
class Meta:
model = User
fields = [
'id',
'email',
'password',
'role'
]
我想创建一个用户并使用它的实例来创建一个教师,同时来自同一个序列化程序。我该怎么做?
下面是我的 api 视图
class TeacherCreate(CreateAPIView):
""" View for Creating Teacher """
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated,AdminOnly]
serializer_class = TeacherCreateSerilaizer
【问题讨论】:
标签: django-rest-framework django-class-based-views django-serializer django-generic-views django-rest-viewsets