Дополнительное поле select не возвращается из метода create() сериализатора django-rest

Django==3.1.5 djangorestframework==3.12.2

Я хочу сортировать методом order_by() динамически вычисляемое поле. Это поле - "is_active". Я добавил это поле в класс ActivityModelManager, как показано ниже. Поле "is_active" не появляется в данных, возвращаемых из метода create сериализатора. Но в данных, возвращаемых методом обновления сериализатора, появляется.


managers.py

class ActivityModelManager(models.Manager):

    def get_queryset(self):
        qs = super().get_queryset()

        today = datetime.datetime.today().date()
        qs = qs.extra(select={'is_active': 'start_date <= %s AND %s < finish_date'}, select_params=(today, today))

        return qs

model.py

class ActivityModel(TimestampAbstractModel):
    name = models.CharField(max_length=255)
    start_date = models.DateField()
    finish_date = models.DateField()
    vacancy = models.PositiveIntegerField(validators=[MinValueValidator(limit_value=1)])
    
    objects = ActivityModelManager()

    def __str__(self):
        return self.name

serializers.py

class ActivitySerializer(serializers.ModelSerializer):
    is_active = serializers.BooleanField(read_only=True)

    class Meta:
        model = ActivityModel
        fields = [
            'id', 'name', 'start_date', 'finish_date', 'vacancy', 'is_active'
        ]
        read_only_fields = [
            'id', 'is_active'
        ]

import datetime
    from dateutil.relativedelta import relativedelta
    from my_app.models import ActivityModel
    from my_app_serializers import ActivitySerializer
    
    #############
    #creating
    #############
    
    start_date = datetime.datetime.today.date()
    finish_date = start_date + relativedelta(months=1)
    data = {
          "name"        : "Activity name", 
          "start_date"  : start_date, 
          "finish_date" : finish_date,
          "vacancy"     : 60
    }
    
    serializer = ActivitySerializer(data=data)
    serializer.is_valid()
    ret_val = serializer.save()
    
    #####################################################
    #ret_val variable has not contain "is_active" field.
    #####################################################
    
    ###########
    #updating
    ##########
    
    instance = ActivityModel.objects.create(
                       name        = "Activity Name"
                       start_date  = start_date,
                       finish_date = finish_date,
                       vacancy     = 60
               )
    
    data = {
         "name"        : "Activity name", 
         "start_date"  : start_date, 
         "finish_date" : finish_date,
         "vacancy"     : 60
    }
    
    serializer = ActivitySerializer(data=data, instance=instance)
    serializer.is_valid()
    ret_val = serializer.save()
    
    #################################################
    #ret_val variable has contain "is_active" field.
    #################################################
Вернуться на верх