Django: поля проверки Create Serializer не используются - PullRequest
1 голос
/ 16 июня 2020

Просто быстрый вопрос о 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?

Спасибо за ответы!

1 Ответ

0 голосов
/ 16 июня 2020

Поля в классе Meta только указывают, что соответствующие поля модели должны быть сериализованы / десериализованы для различных методов http.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...