我有大型数据表(~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列出所有名称等。 请帮我弄清楚如何做到这一点,谢谢!
答案 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