【问题标题】:Not able to get a hyperlinked field in django-rest-framework无法在 django-rest-framework 中获得超链接字段
【发布时间】:2014-07-20 19:00:39
【问题描述】:

我的model.py Transaction 和 Split 中有两个模型。一个事务可以有很多拆分,我试图让 django-rest-frameowrk 返回具有超链接关系的响应。

类似这样的事情:

{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "desc": "House Rent", 
            "currency": "INR", 
            "amount": 5000.0, 
            "splits": [
                       'http://www.example.com/api/splits/45/',
                       'http://www.example.com/api/splits/46/',
                       'http://www.example.com/api/splits/47/',
            ]
        }
    ]
}

但无论我在 TransactionSerializer 中为 splits 字段尝试哪个字段,我总是会得到一个响应链接:

{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "desc": "House Rent", 
            "currency": "INR", 
            "amount": 5000.0, 
            "splits": [
                1, 
                2
            ]
        }
    ]
}

我写的模型和序列化器如下 型号:

  class Transaction(models.Model):
        desc = models.CharField(max_length=255)
        currency = models.CharField(max_length=255)
        amount = models.FloatField()


  class Split(models.Model):
        transaction = models.ForeignKey(Transaction, \
                                        related_name='splits' )
        userid = models.CharField(max_length=255)
        split = models.IntegerField()

        class Meta:
            unique_together = ('transaction', 'userid')

序列化器:

class SplitSerializer(HyperlinkedModelSerializer):
        class Meta:
            model = Split
            fields = ('transaction', 'userid', 'split')

class TransactionSerializer(serializers.ModelSerializer):
    split = HyperlinkedRelatedField(many=True, \
                                    view_name='split-detail')

    class Meta:
        model = Transaction
        fields = ('desc', 'currency', 'amount', 'splits')    

如果您需要项目的完整代码,请访问 github here

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您需要在您的TransactionSerializer 上将split 重命名为splits

    现在,您已将split 定义为您正在寻找的HyperlinkedRelatedField。您没有在序列化器元数据的fields 元组中包含split,因此它不包含在输出中。将其重命名为 splits 后,它将正确包含在输出中并使用正确的关系生成链接。

    没有重命名,当前序列化程序是auto-generating splits 字段作为PrimaryKeyRelatedField。这就是为什么您将整数作为输出而不是您期望的链接。

    【讨论】:

    • 完美运行,非常感谢您的快速帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2018-08-27
    • 2019-08-20
    • 2021-06-22
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多