HTML 输入中当前不支持列表

5 django html-parsing django-rest-framework

我正在为我的 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
Run Code Online (Sandbox Code Playgroud)

我的序列化器是这样的:

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

     class Meta:
         model = Alert
         fields = (
             'id', 'name', 'queue','email', 'expected_qos'
         )
Run Code Online (Sandbox Code Playgroud)

Lin*_*via 5

我能做什么 ?

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

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


Hug*_*nte 4

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

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

序列化器中字段的命名方式与模型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'
        )
Run Code Online (Sandbox Code Playgroud)