Django休息框架:自动为模型的每个字段创建一个url

时间:2017-02-10 15:57:53

标签: django django-rest-framework large-data

我有大型数据表(~30 Mb),我将其转换为Django中的模型。现在我希望通过REST API访问该数据。

我已经成功安装了Django REST框架,但我正在寻找一种方法来自动为模型中的每个字段创建一个URL。我的模型有大约100个字段,每个字段有大约100,000个条目。

如果我的模型名为Sample,

models.py

class Sample(models.Model):
    index = models.IntegerField(primary_key=True)
    year = models.IntegerField(blank=True, null=True)
    name = models.TextField(blank=True, null=True)
    ...97 more fields...

然后我可以使用Django REST框架访问整个模型:

urls.py
class SampleSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Sample
        fields = ( **100 fields**)

class SampleViewSet(viewsets.ModelViewSet):
    queryset = Sample.objects.all()
    serializer_class = SampleSerializer

router = routers.DefaultRouter()
router.register(r'sample', SampleViewSet)

但当然我的浏览器无法在合理的时间内加载所有数据。我可以为每个字段手动创建不同的类和URL,但必须有更好的方法...我希望能够访问my_site.com/sample/year(例如)并列出所有年份以JSON格式或my_site.com/sample/name列出所有名称等。 请帮我弄清楚如何做到这一点,谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用自定义视图集路径执行此操作。

你有这个:

/api/model/sample_field/?field=foo

您可以从网址获取此信息:

mysite.com/sample/sample_field/?field='year'

视图集上的这个额外方法将在samples端点下创建一个新端点。由于它是list_route,您可以使用/ sample_field来访问它。

所以关注你的代码,它将是:

'custom' => [ 'myField' => [ 'my_custome_validator' => 'You made an error.', ], ],

例如。

您的问题中有许多有趣的细节,但有了这个示例,我认为您可以实现您想要的目标。

答案 1 :(得分:0)

尝试使用分页。您可以使用与问题相同的方式完成此操作。 django中的分页允许您将结果划分为页面。您不必在同一页面中显示所有条目。我认为这是你的最佳选择。

请参阅关于分页的django文档: Pagination in django