2017-07-15 57 views
0

class_name是對應於玩家角色類的數字字段。 我想將這些值映射到字符類名稱並將其顯示在序列化程序中。如何在Django Rest中將值映射到另一個值

class Character(models.Model): 
    name = models.CharField(primary_key=True, max_length=10) 
    level = models.IntegerField(blank=True, null=True) 
    class_name= models.SmallIntegerField(blank=True, null=True) 
    pk_count = models.IntegerField(blank=True, null=True) 
    resets = models.SmallIntegerField(blank=True, null=True) 

class CharacterSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = models.Character 
     fields = ('name', 'level', 'class_name', 'pk_count', 'resets') 

電流輸出

{ 
    "name": "Player1", 
    "level": 250, 
    "class_name": 1, 
    "pk_count": 200, 
    "resets": 27 
} 

所需的輸出

{ 
    "name": "Player1", 
    "level": 250, 
    "class_name": "Warrior", 
    "pk_count": 200, 
    "resets": 27 
} 

是否有可能這個值映射? 類似的東西{ 1 : "Warrior" }

謝謝大家。

回答

0

在你的類:

class Character(models.Model): 
    name = models.CharField(primary_key=True, max_length=10) 
    level = models.IntegerField(blank=True, null=True) 
    class_name= models.SmallIntegerField(blank=True, null=True) 
    pk_count = models.IntegerField(blank=True, null=True) 
    resets = models.SmallIntegerField(blank=True, null=True) 
    #add a dict for your values 
    values = {'1':'Warrior','2':'Whatever'} 

    @property 
    def class_name_value(self): 
      return values[self.class_name] if values[self.class_name] else 'default' 

然後你的串行:

class CharacterSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = models.Character 
     fields = ('name', 'level', 'class_name_value', 'pk_count', 'resets') 
0

dmitryro的回答是一個很好的方式輕鬆地訪問這些映射值在網站的任何地方。僅在相關串行器中將值映射到字段名稱的另一種方式是使用SerializerMethodField

class CharacterSerializer(serializers.ModelSerializer): 
    class_name = serializers.SerializerMethodField() 

    class Meta: 
     model = models.Character 
     fields = ('name', 'level', 'class_name', 'pk_count', 'resets') 

    def get_class_name(self, obj): 
     try: 
      return obj.values[str(obj.class_name)] 
     except KeyError: 
      return 'default' 
相關問題