Django 从 [ErrorDetail(string='Test Message', code='invalid')] 中提取字符串

mpj*_*mpj 7 django serialization templates python-3.x django-rest-framework

我想在我的模板中只显示字符串变量中的消息,但我不知道如何。我正在使用 Django Rest 框架。我的代码:

表单.html

<p>{{ serializer.amount.errors }}</p>
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

from rest_framework import serializers
from .models import Data, Material


class DataSerializer(serializers.ModelSerializer):

class Meta:
    model = Data
    fields = ('order_date', 'material', 'amount', 'delivery_number', 'employee')
    read_only_fields = ('id', 'insert_time')
    extra_kwargs = {"amount": {"error_messages": {"invalid": "Test Message"}}}
Run Code Online (Sandbox Code Playgroud)

视图.py

class Form(APIView):

renderer_classes = [TemplateHTMLRenderer]
template_name = 'zulieferung/form.html'

def get(self, request):
    materials = Material.objects.distinct('material_unit_id')
    return Response({'all_materials': materials})

def post(self, request):
    materials = Material.objects.all()
    serializer = DataSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response({'all_materials': materials}, status=status.HTTP_201_CREATED)
    return Response({'serializer': serializer}, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

而不是我的模板中的测试消息,我有[ErrorDetail(string='Test Message', code='invalid')]

在此处输入图片说明

Man*_*hah 14

ErrorDetail您可以通过以下方式从对象获取字符串:-

>>> op = ErrorDetail(string='Value must be valid JSON or key, valued pair.', code='invalid')
>>> op.title()
'Value must be valid JSON or key, valued pair.'
Run Code Online (Sandbox Code Playgroud)


100*_*ams 5

>>> error = ErrorDetail(string='Value must be valid JSON or key, valued pair.', code='invalid')
>>> str(error)
'Value must be valid JSON or key, valued pair.'
Run Code Online (Sandbox Code Playgroud)


Kry*_*ček 4

你应该在你的模板中尝试

{% for error in serializer.amount.errors %}
    {{ error }}
{% endofor %}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么你使用 django rest_framework 和 HTML 模板。Rest 框架用于 REST API,这绝对不是这种情况。为此目的,请使用django.forms. 使用 REST 序列化器直接渲染到 HTML 模板确实没有意义。

链接:

使用表单

何时使用 REST 框架