【问题标题】:Django REST error: TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundField'Django REST 错误:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“BoundField”
【发布时间】:2021-07-04 02:15:48
【问题描述】:

我有一个函数,它通过将星期数作为参数输出星期五

def fridayOfWeek(p_week):
    p_year=2021
    monday = datetime.datetime.strptime(f'{p_year}-W{int(p_week )- 1}-1', "%Y-W%W-%w").date()
    wednesday = monday + datetime.timedelta(days=2)
    friday  = monday + datetime.timedelta(days=6.9) - datetime.timedelta(days=2)
    return friday

但是当我序列化数据并设置时

serialize = ExamSimulatorSerializer(request.data)
date = fridayOfWeek(serializer["week"])

它给了我一个错误

   
      File "C:\Users\user1\Desktop\backend\data_manager\views.py", line 43, in examSimulator
        date = fridayOfWeek(m['week'])
      File "C:\Users\user1\Desktop\backend\week_into_date.py", line 10, in fridayOfWeek
        monday = datetime.datetime.strptime(f'{p_year}-W{int(p_week )- 1}-1', "%Y-W%W-%w").date()
    
    Exception Type: TypeError at /api/exam-simulator/
    Exception Value: int() argument must be a string, a bytes-like object or a number, not 'BoundField'

我的序列化程序类是:

class ExamSimulatorSerializer(serializers.Serializer):
    week = serializers.IntegerField() 
    subject = serializers.CharField()
    code = serializers.CharField()
    
    def create(self, validated_data):
        pass

我的意见.py

@api_view(['POST'])
@parser_classes([JSONParser])
def examSimulator(request):
    m = ExamSimulatorSerializer(request.data)
    code = m['code']
    date = fridayOfWeek(m['week'])
    subject = Subject.objects.get(name = m['subject'])
    for s in subject.students.all().values():
        student = Student.objects.get(roll_num=s['roll_num'])
        score = random.randint(25,95)
        Exam.objects.create(code=code, date=date, student=student, subject=subject,score=score)
        return Response(status=status.HTTP_200_OK)        

此外,这是制作无模型序列化程序类的正确方法吗

【问题讨论】:

    标签: python django django-rest-framework django-serializer


    【解决方案1】:

    您将能够访问serializer.data["week"] 而不是serializer["week"] 中的序列化程序数据

    还请注意,您在序列化程序变量上有一个小错字,试试这个:

    serializer = ExamSimulatorSerializer(request.data)
    date = fridayOfWeek(serializer.data["week"])
    

    甚至:

    serializer = ExamSimulatorSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    date = fridayOfWeek(serializer.validated_data["week"])
    

    如果您想验证您的数据并在序列化程序无效时引发异常

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 2017-11-14
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2020-08-22
      • 2021-10-29
      相关资源
      最近更新 更多