官术网_书友最值得收藏!

Using model serializers to eliminate duplicate code

The GameSerializer class declares many attributes with the same names that we used in the Game model and repeats information, such as the types and the max_length values. The GameSerializer class is a subclass of rest_framework.serializers.Serializer, it declares attributes that we manually mapped to the appropriate types and overrides the create and update methods.

Now, we will create a new version of the GameSerializer class that will inherit from the rest_framework.serializers.ModelSerializer class. The ModelSerializer class automatically populates both set of default fields and a set of default validators. In addition, the class provides default implementations for the create and update methods.

Tip

In case you have any experience with Django Web Framework, you will notice that the Serializer and ModelSerializer classes are similar to the Form and ModelForm classes.

Now, go to the gamesapi/games folder and open the serializers.py file. Replace the code in this file with the following code, that declares the new version of the GameSerializer class. The code file for the sample is included in the restful_python_chapter_02_01 folder:

from rest_framework import serializers 
from games.models import Game 
 
 
class GameSerializer(serializers.ModelSerializer): 
    class Meta: 
        model = Game 
        fields = ('id',  
                  'name',  
                  'release_date', 
                  'game_category',  
                  'played') 

The new GameSerializer class declares a Meta inner class that declares two attributes: model and fields. The model attribute specifies the model related to the serializer, that is, the Game class. The fields attribute specifies a tuple of string whose values indicate the field names that we want to include in the serialization from the related model.

There is no need to override either create or update methods because the generic behavior will be enough in this case. The ModelSerializer superclass provides implementations for both methods.

We have reduced the boilerplate code that we didn't require in the GameSerializer class. We just needed to specify the desired set of fields in a tuple. Now, the types related to the game fields are included only in the Game class.

Tip

Press Ctrl + C to quit Django's development server and execute the following command to start it again:

python manage.py runserver
主站蜘蛛池模板: 安乡县| 合肥市| 峨眉山市| 农安县| 泰来县| 虹口区| 景洪市| 德安县| 福鼎市| 姜堰市| 榆林市| 武穴市| 定襄县| 南木林县| 新郑市| 同仁县| 县级市| 仙桃市| 余江县| 山阳县| 上栗县| 黄大仙区| 贵港市| 从江县| 武威市| 海城市| 琼结县| 周宁县| 海门市| 永定县| 昌乐县| 孝昌县| 新安县| 五大连池市| 石棉县| 台湾省| 呼伦贝尔市| 湘潭县| 华蓥市| 广南县| 临澧县|