Reputation: 472
I have 2 models CustomUser
and Student
. In CustomUserSerializer
, whenever the user is created i also want to create Student
instance inside CustomUserSerializer
. How can I get the current user instance?
# models.py
class CustomUser(AbstractUser):
is_student = models.BooleanField('student status', default=False)
is_teacher = models.BooleanField('teacher status', default=False)
email = models.EmailField(_('Email Address'), unique=True, blank=True)
class Student(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, primary_key=True)
# serializers.py
class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = models.CustomUser
fields = [
'id', 'email', 'is_teacher', 'is_student',..]
def create(self, validated_data):
if validated_data.get('is_student') == True:
Student.objects.create(user=...?) # what should I put here?
return super(CustomUserSerializer, self).create(validated_data)
[UPDATED]
I have another question it's related to Student
model.
If I have models like below should I create serializer for Student
? when I want to have serializer for Class
.
class Class(models.Model):
student = models.ManyToManyField(Student)
Thanks
Upvotes: 0
Views: 719
Reputation: 88499
Change your create method as
class CustomUserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
is_student = validated_data.pop("is_student", False)
user = super().create(validated_data)
if is_student:
Student.objects.create(user=user)
return user
class Meta:
model = models.CustomUser
fields = [
'id', 'email', 'is_teacher', 'is_student',..
]
Upvotes: 1