Django中的数据争论

时间:2018-01-26 18:26:47

标签: django

我是Django框架的新手,但已经设法组建了一个包含视图,模型,模板的网站,并通过Django REST框架将其连接到我的数据库(Postgresql)。

我正在从数据库中检索数据,但是有些数据需要转换(例如,如果正数= 1,如果null = 0,或者将所有数字乘以100,依此类推)。我的问题是,我在Django哪里可以做到这一点?

这应该以某种方式在model.py,view.py或serializer.py中完成吗?

为这个基本问题道歉,但我正在努力解决这个问题。

我的model.py

from django.db import models


# Create your models here.
class Test(models.Model):
    index = models.BigIntegerField(blank=True, null=True)
    hash_id = models.BigIntegerField(primary_key=True, blank=True)
    locality = models.TextField(blank=True, null=True)
    page = models.BigIntegerField(blank=True, null=True)
    latitude = models.FloatField(blank=True, null=True)
    longitude = models.FloatField(blank=True, null=True)
    ...

serializer.py

from rest_framework import serializers
from rentlistings.models import Test


class coordinatesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Test
        fields = ('latitude', 'longitude')


class propertiesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Test
        fields = ('price', 'price', 'yields',
                  'num_floor', 'num_rooms', 'elevator', 'garage',
                  'balcony_size', 'garden_area', 'parking', 'terass',
                  'loggia', 'cellar', 'hash_id')


class TestSerializer(serializers.Serializer):
    coordinates = coordinatesSerializer(many=True, read_only=True)
    properties = propertiesSerializer(many=True, read_only=True)

    class Meta:
        model = Test
        fields = ('coordinates', 'properties')

views.py

from rentlistings.models import Test
from rentlistings.serializers import TestSerializer
from rest_framework import generics
# Create your views here.


class test_list(generics.ListCreateAPIView):
        queryset = Test.objects.all()
        serializer_class = TestSerializer

1 个答案:

答案 0 :(得分:0)

有几个选项,我喜欢为某些变换做的一件事是添加一个SerializerMethodField()并包含原始字段。

例如,如果我有一个平衡字段'并且还想包括布尔' owes_money'

class MySerializer(serialiers.ModelSerializer):
      owes_money = serializers.SerializerMethodField()

      def get_owes_money(self, instance):
          return instance.balance > 0