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

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
主站蜘蛛池模板: 南川市| 崇文区| 汕尾市| 开阳县| 平陆县| 沅陵县| 弥渡县| 桂东县| 甘泉县| 砚山县| 双峰县| 阳高县| 准格尔旗| 蓬安县| 金寨县| 元朗区| 长海县| 岳池县| 日土县| 尼木县| 三明市| 永靖县| 乌兰县| 靖远县| 苍山县| 临湘市| 轮台县| 汕尾市| 安塞县| 金阳县| 东乡县| 化德县| 贵阳市| 韶关市| 新平| 上饶县| 环江| 泗洪县| 彰化县| 云霄县| 宜川县|