Просто быстрый вопрос о Serializers
в Django RestFramework. Особенно по поводу класса create
.
Я думал, что CreateSerializer
было о том, что было необходимо для создания объекта. Например, мой UserCreateSerializer
:
from rest_framework import serializers
from django.contrib.auth import get_user_model
from ..models.model_user import *
class UserCreateSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'id',
'username',
'password',
'first_name',
'last_name',
'email',
'is_a',
'is_e',
'is_b',
'profile'
]
extra_kwargs = {
'password': {'write_only': True},
'id': {'read_only': True},
'profile': {'read_only': True}
}
def create(self, validated_data):
user = User(
username=validated_data['username'],
password=validated_data['password'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
email=validated_data['email'],
is_a=validated_data['is_a'],
is_e=validated_data['is_e'],
is_b=validated_data['is_b']
)
user.set_password(validated_data['password'])
user.save()
return user
И поэтому, когда в моем Angular FrontEnd I POST
новый пользователь выглядит так:
ngOnInit(): void {
this.registerForm = this.formBuilder.group({
username: [''],
password: [''],
first_name: [''],
last_name: [''],
email: [''],
is_a: [null],
is_e: [null],
is_b: [null]
});
}
createUserOnSubmit() {
this.http.post(this.ROOT_URL + 'users/',
this.registerForm.value).subscribe(
response => {
console.log("yolo", response);
console.log(response['id']);
this.redirectUser(response['id']);
},
error => {
console.log("yolo-error", error);
});
}
redirectUser(userId: number) {
this.router.navigate(['user/', userId]);
}
}
I POST
новый пользователь без каких-либо id
и profile
(профиль создается при создании пользователя с прослушивателем событий в BackEnd), это не беспокоит BackEnd и тот факт, что я включаю profile
в свой UserCreateSerializer
отправляет мне обратно в консоль новые пользовательские значения, включая user.profile.id
В чем смысл «полей» из UserCreateSerializer, чтобы убедиться, что все указанные поля предоставлены в запросе POST ( не похоже), или вернуть объект с указанными c полями с кодом 201?
Спасибо за ответы!