Django Rest Framework:如何获得ForeignKey

时间:2017-08-21 19:42:58

标签: django django-rest-framework

在Django Rest Framework中,如何获取ForeignKey的值而不是' id'?我希望将financial_year作为全年,即2012年或2013年,而不是例如输出中的1和2。我怎样才能做到这一点?

我得到的输出如下:

[{"financial_year":1,"mainline_revenue":18743.0,"regional_revenue":2914.0},{"financial_year":2,"mainline_revenue":23876.0,"regional_revenue":3204.0}]

但我想:

[{"financial_year":2012,"mainline_revenue":18743.0,"regional_revenue":2914.0},{"financial_year":2013,"mainline_revenue":23876.0,"regional_revenue":3204.0}]

Models.py:

class FinancialData(models.Model):
    financial_year = models.ForeignKey(Year)
    mainline_revenue = models.DecimalField(max_digits=7, decimal_places=2)
    regional_revenue = models.DecimalField(max_digits=7, decimal_places=2)

class Year(models.Model):
    YEARS_CHOICE = (
        (2012, 2012),
        (2013, 2013),
        (2014, 2014),
        (2015, 2015),
        (2016, 2016),
        )
    year = models.IntegerField(choices=YEARS_CHOICE, blank=True, null=True)

Serializers.py:

class FinancialDataSerializer(serializers.ModelSerializer):
    class Meta:
        model = FinancialData
        fields = (
            'financial_year',
            'mainline_revenue',
            'regional_revenue',)

1 个答案:

答案 0 :(得分:2)

您可以通过明确指定字段来访问外键字段值

class FinancialDataSerializer(serializers.ModelSerializer):
    financial_year = serializers.CharField(source='financial_year.year')
    class Meta:
        model = FinancialData
        fields = (
            'financial_year',
            'mainline_revenue',
            'regional_revenue',)

source参数定义属性名称。假设您的Year模型的字段名称为year,那么它可以正常工作。如果字段名称不同,则必须更改它。