Я переопределяю метод create в сериализаторе, но кажется, что он не попадает в эту функцию, когда я выполняю запрос POST:
Мой сериализатор:
class ElsUserSerializer(serializers.ModelSerializer):
class Meta:
model = ElsUser
fields = ['id', 'first_name', 'last_name', "email"]
read_only_fields = ['id']
class RequisiteItemSerializser(serializers.ModelSerializer):
created_by = ElsUserSerializer()
class Meta:
model = RequisiteItem
fields = ['id', 'enrollable', 'completed_within_days', 'completed_within_type','date_completed_by', 'created_by' ]
read_only_fields = ['id']
class RequisiteSerializer(serializers.ModelSerializer):
created_by = ElsUserSerializer()
items = RequisiteItemSerializser(many=True)
class Meta:
model = Requisite
fields = ('id', 'name', 'description', 'items', 'enrolments', 'created_by', 'timestamp')
read_only_fields = ['id']
depth = 1
def create(self, validated_data):
print("SELF INTITIAL DATA", self.initial_data)
helper = RequisiteHelper()
requisite = helper.create(self.initial_data,self.context['request'])
print("LOGGES IN USER", self.context['request'].user.username)
return requisite
Я переместил методык отдельному вспомогательному классу:
Мой вспомогательный класс:
class RequisiteHelper:
def create(self, initial_data, context):
name = initial_data['name']
description = initial_data['description']
items = initial_data['items']
enrolments = initial_data['enrolments']
requisite = Requisite.objects.create(name=name, description=description, created_by=context.user)
self.create_items(requisite, items, context)
self.create_enrolments(requisite, enrolments)
requisite.save()
return requisite
def create_items(self, requisite, items, context):
for item in items:
requisite_item = RequisiteItem()
enrollable = Enrollable.objects.get(id=item.enrollable.id)
requisite_item.enrollable = enrollable
requisite_item.created_by = context.user
requisite_item.completed_within_days = item.completed_within_days
cw_type = CompletedWithinType.objects.get(short_name = item.completed_within_type)
requisite_item.completed_within_type = cw_type
requisite_item.save()
requisite.items.add(requisite_item)
def create_enrolments(self, requisite, enrolments):
for enrolment in enrolments:
requisite.add(enrolment)
Когда я создаю метод Requisite by post, он продолжает показывать, что созданный_обязателен.Я сохраняю create_by автоматически как зарегистрированного пользователя, переопределяя метод create.Операторы печати также не отображаются.Что я могу делать не так?
В views.py у меня есть:
class ListCreateRequisite(generics.ListCreateAPIView):
serializer_class = RequisiteSerializer
queryset = Requisite.objects.all()