当有反向的ForeignKey时,如何使用Django Rest Framework中的RelatedField?

时间:2016-10-20 20:55:49

标签: django django-rest-framework

以下是我的模特:

class Property(models.Model):
    id = [...]
    address = [...]

class Property_Value(models.Model):
    id = models.ForeignKey(Property)
    amount = [...]
    last_updated = [...]

    def __unicode__(self):
        return '%s: %s' % (self.last_updated, self.amount)

我的序列化器是:

class Property_ValueSerializer(serializers.ModelSerializer):

    class Meta:
        model = Property_Value
        fields = ('last_updated', 'amount')

class PropertySerializer(serializers.ModelSerializer):
    1) property_values = Property_ValueSerializer(source='property_value_set', many=True)
    2) property_values = serializers.RelatedField(many=True, read_only=True)

    class Meta:
        model = Property
        fields = ('id', 'address', 'property_values')

我想像这样展示一个json:

[
    {
        "id": "2",
        "address": "123 Apple Lane",
        "property_values": [
            {
                "10/13/2016": "1709195.00"
            }
        ]
    }
]

如果我使用选项1,我会得到:

[
    {
        "id": "2",
        "address": "123 Apple Lane",
        "property_values": [
            {
                "last_updated": "10/13/2016",
                "amount": "1709195.00"
            }
        ]
    }
]

如果我使用选项2(这是Rest教程的建议,我得到一个归因错误:

AttributeError at /api/property/
'Property' object has no attribute 'property_values'

我不太确定我做错了什么。有人可以指出我做错了什么吗?感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用StringRelatedField返回相关字段的__unicode__表示。在您的情况下,__unicode__方法已经按照您在序列化程序中期望的方式返回值。

class PropertySerializer(serializers.ModelSerializer):
    property_values = serializers.StringRelatedField(many=True)

    class Meta:
        model = Property
        fields = ('id', 'address', 'property_values')

class Property_Value(models.Model):
    id = models.ForeignKey(Property, related_filed="property_values")
    amount = [...]
    last_updated = [...]

    def __unicode__(self):
        return '%s: %s' % (self.last_updated, self.amount)