【问题标题】:Django DRF - Include Foreign-Key field to serializerDjango DRF - 将外键字段包含到序列化程序中
【发布时间】:2017-05-24 03:46:25
【问题描述】:

如何将“platform_description”字段添加到battlesSerializer 结果中?

型号

类战(models.Model):

# Fields
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
wager = models.FloatField(max_length=30)
battle_rules = models.CharField(max_length=30,null = True,blank = True)
accepting_time = models.DateTimeField()
offer_expiration_time = models.DateTimeField(null = True,blank = True)
battle_time = models.DateTimeField(null = True,blank = True)
rake = models.FloatField()

# Relationship Fields
platform_id = models.ForeignKey('platforms.game_platforms', related_name='seal')

class Meta:
    ordering = ('-created',)

def __unicode__(self):
    return u'%s' % self.id

def get_absolute_url(self):
    return reverse('platforms_battles_detail', args=(self.id,))


def get_update_url(self):
    return reverse('platforms_battles_update', args=(self.id,))

class game_platforms(models.Model):

# Fields
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
platform_description = models.CharField(max_length=30)


class Meta:
    ordering = ('-created',)

def __unicode__(self):
    return u'%s' % self.id

def __str__(self):
    return '%s' % self.platform_description

def get_absolute_url(self):
    return reverse('platforms_game_platforms_detail', args=(self.id,))


def get_update_url(self):
    return reverse('platforms_game_platforms_update', args=(self.id,))

序列化器

类战Serializer(serializers.ModelSerializer):

class Meta:
    model = models.battles
    fields = (
        'id', 
        'created', 
        'last_updated', 
        'wager', 
        'battle_rules', 
        'accepting_time', 
        'offer_expiration_time', 
        'battle_time', 
        'rake',
    )

class game_platformsSerializer(serializers.ModelSerializer):

class Meta:
    model = models.game_platforms
    fields = (
        'id', 
        'created', 
        'last_updated', 
        'platform_description', 
    )

【问题讨论】:

    标签: django serialization relationship django-rest-framework


    【解决方案1】:

    你可以使用SerializerMethodField:

    class battlesSerializer(serializers.ModelSerializer):
    
        platform_description = serializers.SerializerMethodField()
    
        def get_platform_description(self, obj):
    
            # Use a try - except block if needed
    
            return obj.platform_id.platform_description
    
        class Meta:
            model = models.battles
            fields = (
                'id', 
                'created', 
                'last_updated', 
                'wager', 
                'battle_rules', 
                'accepting_time', 
                'offer_expiration_time', 
                'battle_time', 
                'rake',
                'platform_description',  # add this field
            )
    

    另外,您可以查看PEP8's naming conventions 来编写优雅的python 代码。

    【讨论】:

    • @user3139926 对你有好处。考虑将其标记为正确答案,以帮助遇到相同问题的其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多