代码之家  ›  专栏  ›  技术社区  ›  mpj

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

  •  1
  • mpj  · 技术社区  · 6 年前

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

    表单.html

    <p>{{ serializer.amount.errors }}</p>
    

    序列化程序.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"}}}
    

    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)
    

    而不是 在我的模板中 [错误详细信息(string='Test Message',code='invalid')]

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community noseratio    4 年前

    你应该试试你的模板

    {% for error in serializer.amount.errors %}
        {{ error }}
    {% endofor %}
    

    但我不明白为什么要用DjangoREST\框架和HTML模板。Rest框架用于restapi,但这种情况绝对不是这样。为此,请使用 django.forms . 使用直接呈现到HTML模板的REST序列化程序是没有意义的。

    Working with forms

    When to use REST framework

        2
  •  1
  •   Ashik Saibabu T    3 年前

    您可以从rest获取错误消息_framework.exceptions.ValidationError错误对象如下

    err = ErrorDetail(string='User with the given Email exists', code='invalid')
    err_message = err.args[0]["error"]
    
        3
  •  0
  •   Shaonsani    3 年前

    因为序列化程序的错误在一个列表中,所以您必须更精确地处理它, 一串

    for key, values in serializers.errors.items():
       error = [value[:] for value in values]
       print(error)
    

    然后你可以得到一个列表中的所有错误。虽然字段在列表中有多个错误。所以我的代码可以从ErrorDetail()对象中提取字符串。