HTML输入当前不支持列表

时间:2017-03-02 19:54:59

标签: django django-rest-framework html-parsing

我正在为我的API端点使用Django REST通用视图。我的序列化程序中的一个字段具有ManyToMany关系。我想将该字段显示在我的API端点中,但是出现此错误

  

HTML输入目前不支持列表。

我的观点是:

class AlertCreateView(ListCreateAPIView):
    permission_classes = (IsAuthenticated,)
    pagination_class = None
    serializer_class = AlertSerializer

    def get_queryset(self):
        queues = Queue.objects.all()
        for queue in queues:
           queryset = Alert.objects.filter(
               queue=queue
           )

        return queryset

My Serializer就是这样:

class AlertSerializer(serializers.ModelSerializer):
     queue = QueueSerializer(many=True)

     class Meta:
         model = Alert
         fields = (
             'id', 'name', 'queue','email', 'expected_qos'
         )

2 个答案:

答案 0 :(得分:2)

  

我该怎么办?

因为HTML表单目前不支持嵌套序列化程序,所以并不多。

您可以在序列化程序中使用非嵌套关系字段来解决此问题,或者只使用常规JSON。

答案 1 :(得分:1)

您不需要get_queryset方法就可以执行以下操作:

#views.py
class AlertCreateView(ListCreateAPIView):
     queryset = Alert.objects.all()
     serializer_class = AlertSerializer
     permission_classes = (IsAuthenticated,)

在序列化程序中命名queues字段的方式与在模型的related_name中编写的字段相同。您的QueueSerializer可以继承PrimaryKeyRelatedField进行渲染。

#models.py
class AlertModel(models.Model):
    ...
    queues = models.ManyToManyField(Queue, ... related_name='queues')     
    ...

#serializer.py
class QueueSerializer(PrimaryKeyRelatedField, serializers.ModelSerializer):
    class Meta:
       model: Queue

class AlertSerializer(serializers.ModelSerializer):
    queues = QueueSerializer(many=True, queryset=Queue.objects.all())

    class Meta:
        model = Alert
        fields = (
         'id', 'name', 'queues','email', 'expected_qos'
        )