我试图使用Django Rest Framework中的内置API视图来获取具有大量表的外键的模型。
class WidgetAttribute(models.Model):
widget= models.ForeignKey(Widget, related_name="attributes")
key = models.TextField()
value = models.TextField()
我有以下序列化程序。
class WidgetAttributeSerializer(serializers.ModelSerializer):
class Meta:
model = WidgetAttribute
不幸的是,Widget表包含大约500万行,默认情况下,DRF会尝试将其呈现为包含所有项目的选择字段。那只是永远挂起。我已经尝试使用说明here,将以下行添加到我的序列化程序中:
widget = serializers.RelatedField(queryset=Widget.objects.all(), style={'base_template': 'input.html'})
但我仍然遇到同样的问题。当我查看程序执行时,它仍然在Widget上调用__unicode__
方法500万次。我该如何解决这个问题?理想情况下,我希望/widget/attribute/
显示所有现有的小部件,然后给我一个大的空白文本区域来插入数据(不会分成选择字段或任何特定的)。我不确定它是否相关,但这是我正在使用的观点:
class WidgetAttributeList(generics.ListCreateAPIView):
model = WidgetAttribute
serializer_class = WidgetAttributeSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('widget', 'key')
def get_queryset(self):
"""
Overwrite the query to check permissions.
"""
qs_list = [o.id for o in self.model.objects.all() if hasWidgetPerms(self.request.user.client,
o.widget)]
return self.model.objects.filter(id__in=qs_list)