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

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
主站蜘蛛池模板: 台湾省| 蓝山县| 广汉市| 湖北省| 阳原县| 盘锦市| 将乐县| 远安县| 长顺县| 白沙| 肥东县| 辉县市| 苏尼特右旗| 沐川县| 富蕴县| 元氏县| 瓦房店市| 五大连池市| 威海市| 乡宁县| 合水县| 通许县| 吴江市| 通州区| 岳池县| 临海市| 丹寨县| 呼图壁县| 临湘市| 南城县| 遵化市| 洪雅县| 安仁县| 望江县| 保山市| 惠东县| 镇坪县| 宜都市| 安龙县| 康定县| 化州市|