Django (drf) добавление новых параметров/полей только для вывода с существующим набором запросов (используемым для вывода) из базы данных

Я работаю над проектом на drf, где мне нужно получить данные из базы данных (в тысячах), и отобразить выборочные поля в ответе.

models.py

class TblDemo(models.Model):
    tbl_id = models.IntegerField()
    tbl_name = models.CharField(max_length=50)
    tbl_size = models.CharField(max_length=50)
    tbl_height = models.Charfield(max_length=50)
    tbl_material = models.Charfield(max_length=50)

    class Meta:
        managed = True
        db_table = 'tbl_demo'

views.py

class data_fetch(viewsets.ViewSet):
    get tbl_list(self, request, format=None)
        serializer = Tbl_Serializer_input(data=request.data)
        if serializer.is_valid():
            queryset1 = tbl_name.objects.all()
            queryset2 = queryset1.filter(tbl_name=request.data.get("title"))
            serializer = Tbl_Serializer_output(queryset2, many=True)
            return Response(serializer.data)

serializers.py

class Tbl_Serializer_input(serializers.Serializer):
    title = serializers.CharField(required=True, max_length=50)
    refer_no = serializers.CharField(required=True, max_length=50)

class Tbl_Serializer_output(serializers.Serializer):
    tbl_id = serializers.CharField(max_length=50)
    tbl_name = serializers.CharField(max_length=50)
    tbl_size = serializers.CharField(max_length=50)
    tbl_height = serializers.Charfield(max_length=50)

output

[
  {
    "tbl_id":"1", 
    "tbl_name":"white table",
    "tbl_size": "square",
    "tbl_height": "2 feet"
  },
  {
    "tbl_id":"2", 
    "tbl_name":"black table",
    "tbl_size": "square",
    "tbl_height": "3 feet"
  },
  .......and so on.

но теперь, требование таково, что я не могу изменить базу данных/модель, но мне нужно добавить некоторые дополнительные поля, такие как ("refer_no", "material" и "density", которые в целом одинаковы в каждом случае) и с каждым объектом в queryset, который не будет храниться в базе данных, а только для ответа/вывода.

Итак, после добавления новых параметров мой вывод будет иметь вид : где, "refer_no" берется непосредственно из ввода, чтобы показать поля вывода. а "материал" и "плотность" не могут быть добавлены в базу данных, просто должны быть жестко закодированы в середине.

new_output

[
  {
    "tbl_id":"1", 
    "refer_no":"abadadf",
    "tbl_name":"white table",
    "tbl_size": "square",
    "tbl_height": "2 feet",
    "density": "350gm/in"
    "material": "tek wood"
  },
  {
    "tbl_id":"2", 
    "refer_no":"abadadf",
    "tbl_name":"black table",
    "tbl_size": "square",
    "tbl_height": "3 feet",
    "density": "350gm/in",
    "material": "tek wood"
  },
  .......and so on.

Я действительно добавил новые поля с помощью набора запросов из базы данных, но когда он перешел к сериализации, он показывает ошибку кругового цикла.

Помогите, пожалуйста.

Вы можете обработать данные внутри сериализатора, используя метод to_representation.

Например:


class ModelSerializer(serializers.ModelSerializer):

    ...

    def to_representation(self, instance):
        to_repr = super().to_representation(instance)
        # add here the "refer_no", "material" and "density" key-value per object
        return to_repr
Вернуться на верх