我正在为我的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'
)
答案 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'
)