Django Rest Framework:ModelSerializer中的ModelSerializer作为字段不显示选项

时间:2015-02-04 13:03:19

标签: python django django-rest-framework models

我有两个型号:

class Article(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=8, decimal_places=2)

class Order(models.Model):
    article = models.ForeignKey(article, related_name='orders')
    bought_on = models.DateTimeField()

和两个序列化程序类:

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article

class OrderSerializer(serializers.ModelSerializer):
    article = ArticleSerializer()

    class Meta:
        model = Order

现在,如果我想要请求订单的选项,我就不会得到"选择"它看起来像这样:

"article": {
    "type": "field", 
    "required": true, 
    "read_only": false, 
    "label": "Article"
}, 

如果我删除

  

article = ArticleSerializer()

从OrderSerializer

一切正常,我得到了很多关于文章的信息,即:

"article": {
    "type": "field", 
    "required": true, 
    "read_only": false, 
    "label": "Article", 
    "choices": [
        {
            "display_name": "Headphones - 29.00", 
            "value": "8"
        }, 
        {
            "display_name": "Monitor- 199.00", 
            "value": "12"
        },
    ]
}, 

所以这是我的问题:

是否有可能覆盖ArticleSerializer中的选项字段,或者是否有其他方式在API视图中显示文章作为选项

1 个答案:

答案 0 :(得分:1)

以下是汤姆克里斯蒂给我的答案:

  

如果它是嵌套项目,您不希望将其显示为选项。相反,我们应该将其显示为嵌套字段。 (我们可以认为这是一个有效的问题,我认为它在我自己的雷达上是非常低的优先级,所以除非有其他人在运行它,然后......)

     

在你自己的项目中(而不是在核心项目中)支持这一点,有关于如何在这里解决这个问题的一些有限的信息...... http://www.django-rest-framework.org/api-guide/metadata/但你也是想深入了解现有的元数据类实现。