Django REST error: TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundField'

Django REST error: TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundField'

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

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 是:

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

我的views.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)        

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

您将能够访问 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"])

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