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