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"])
如果您想验证数据并在序列化器无效时引发异常
我有一个函数,它通过将周数作为参数来输出星期五
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"])
如果您想验证数据并在序列化器无效时引发异常