Как создать сериализатор с несколькими моделями, которые связаны друг с другом?
Так, у меня есть модель UserAccount, которая имеет следующие поля:
class UserAccount(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True)
iin = models.CharField(max_length=255, unique=True)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
father_name = models.CharField(max_length=255)
phone_number = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_doctor = models.BooleanField(default=False)
objects = UserAccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['iin', 'first_name', 'last_name','father_name', 'phone_number']
def get_full_name(self):
return self.first_name + ' ' + self.last_name + ' ' + self.father_name
def __str__(self):
return self.email
А также этот класс, который имеет пользователя в качестве внешнего ключа:
class Patient(models.Model):
user = models.ForeignKey(UserAccount, on_delete=models.CASCADE)
district = models.CharField(max_length=255)
def __str__(self):
return self.user.email
Мой вопрос заключается в том, как создать сериализатор для регистрации? Как я могу создать UserAccount и Patient, у которого UserAccount является внешним ключом, вместе? PLS HELP Это моя дипломная работа
<class RegistrationSerializer(serializers.ModelSerializer):
class PatientCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Patient
exclude = ['user']
patient = PatientCreateSerializer()
class Meta:
model = UserAccount
fields = '__all__'
def create(self, validated_data):
patient_data = validated_data.pop('patient')
user_instance = UserAccount.objects.create(**validated_data)
Patient.objects.create(user=user_instance,**patient_data)
return user_instance
<
{
"patient": {
"district": "2323232",
"user": [{
"email": "someemail@gmail.com",
"iin": "02020202002",
"first_name": "Some",
"last_name": "Somee",
"father_name": "Someuly",
"phone_number": "+72783928932",
"password": "password",
"re_password": "password"
}]
}
}
Все хорошо, но PatientCreateSerializer не должен размещаться внутри
Например
class PatientCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Patient
exclude = ['user']
class RegistrationSerializer(serializers.ModelSerializer):
patient = PatientCreateSerializer()
class Meta:
model = UserAccount
fields = '__all__'
def create(self, validated_data):
patient_data = validated_data.pop('patient')
user_instance = UserAccount.objects.create(**validated_data)
Patient.objects.create(user=user_instance,**patient_data)
return user_instance
И добавить в patient.user foreign key params related_name=patiend. Если будут ошибки типа "patient in not fields" - опишите поля вручную