Как массово вставить или создать несколько данных - PullRequest
4 голосов
/ 22 апреля 2019

На основании данного объекта данных я поставил ниже.Я хотел спросить, как массово вставить в Django или создать несколько данных.Я предоставил ниже, включая мой сериализатор и код Python.Я хотел создать / вставить каждый пароль из объекта данных, который находится ниже.Не беспокойтесь о других данных.Также я хочу сделать это с сериализатором.Я попытался перебрать данные, которые для каждой_мплои_данных в данных:.Любая проблема с моим кодом.Спасибо.

код

def post(self, request, format=None):
        data = request.data


        print("Data::" , data)

        for each_employee_data in data:
            each_employee_data["verification_code"] = verification_code(self)
            password = hashers.make_password(each_employee_data["password"])
            each_employee_data["password"] = password
            print("each_employee_data", each_employee_data)
            user_serializer = UserSerializer(data= each_employee_data)

        if user_serializer.is_valid(raise_exception=True):

                if not each_employee_data["is_applicant"]:#company
                    company_serializer = CompanySerializer(data=data)
                    if company_serializer.is_valid(raise_exception=True):
                        user_ins = user_serializer.save(password=password)
                        company_serializer.save(user=user_ins)
                else:
                    applicant_serializer = ApplicantSerializer(data=each_employee_data)
                    if applicant_serializer.is_valid(raise_exception=True):
                        user_ins = user_serializer.save(password=password)
                        applicant_serializer.save(user=user_ins)


                send_confirmation.delay(data)
                if not user_ins.is_applicant:
                    send_business_confirmation.delay(data)

Сериализатор

class UserSerializer(serializers.Serializer):
    id                  = serializers.IntegerField(read_only=True)
    is_staff            = serializers.BooleanField(required=False)
    is_confirmed        = serializers.BooleanField(required=False)
    is_applicant        = serializers.BooleanField(required=False)
    email               = serializers.EmailField(required=True,validators=[UniqueValidator(queryset=User.objects.all(), message="Email already exist.")])
    verification_code   = serializers.CharField(required=False)
    password_reset_code = serializers.CharField(required=False)

    def create(self, validated_data):
        """
        Create and return a new `Snippet` instance, given the validated data.
        """
        password = validated_data.pop("password")


return User.objects.create(password=password,**validated_data)

Данные:

[  
   {  
      'mname':'Tap',
      'email':'helloworld@gmail.com',
      'is_applicant':True,
      'lname':'world',
      'fname':'hello',
      'password':'helloworld12345'
   },
   {  
      'mname':'van',
      'email':'haha@gmail.com',
      'is_applicant':True,
      'lname':'asdas',
      'fname':'hellworld124344',
      'password':'asdasdasdas'
   }
]

1 Ответ

1 голос
/ 22 апреля 2019

Когда создается экземпляр сериализатора и передается много = True, создается экземпляр ListSerializer. Класс сериализатора становится потомком родительского ListSerializer. Класс ListSerializer обеспечивает поведение для сериализации и проверки нескольких объектов одновременно.

Есть несколько случаев использования, когда вы можете настроить поведение ListSerializer. В вашем случае вы хотите, чтобы ListSerializer делал массовое обновление. Вам необходимо определить новый пользовательский ListSerializer

class CustomListSerializer(serializers.ListSerializer):
    ...

    def create(self, validated_data):
        ...

class CustomSerializer(serializers.Serializer):
    ...
    class Meta:
        list_serializer_class = CustomListSerializer

В вашем случае это должно быть

class UserListSerializer(serializers.ListSerializer):
        ...

        def create(self, validated_data):
            user = [User(**item) for item in validated_data]
            return User.objects.bulk_create(User)



class UserSerializer(serializers.Serializer):
            ...
            class Meta:
                list_serializer_class = UserListSerializer

https://www.django -rest-framework.org / апи-гид / сериализаторов / # Customizing-listserializer-поведение

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