Django休息框架挂在大ChoiceField上

时间:2016-07-28 14:39:26

标签: serialization django-rest-framework

我试图使用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)

0 个答案:

没有答案