Django: как получить пользователя из ввода формы пользователя
Я пытаюсь внедрить систему учета посещаемости как часть более крупного проекта, который обрабатывает несколько школ одновременно, я пытаюсь получить некоторые данные пользователя, который отмечается как присутствующий, отсутствующий или находящийся в отпуске
serializer.py
class AttendanceSerializer(serializers.ModelSerializer):
class Meta:
model = Attendance
fields = ['user', 'Presence', 'leave_reason', 'Date']
constraints = [
UniqueConstraint(
fields=('user', 'Date'), name='unique_attendance_once_per_date')
]
def create(self, validated_data):
instance = Attendance.objects.create(
user=validated_data['user'],
Presence=validated_data['Presence'],
leave_reason=validated_data['leave_reason'],
attendance_taker=self.context['request'].user,
Date=datetime.today
)
instance.save()
return instance
моя текущая реализация представления:
class AttendanceListCreateAPIView(CreateAPIView):
permission_classes = [IsClassPart]
queryset = Attendance.objects.all()
serializer_class = AttendanceSerializer
def post(self, request, format=None):
user = request.user
try:
perms = Perm.objects.get(user=user)
except ObjectDoesNotExist:
perms = None
serializer = AttendanceSerializer(data=request.data)
if serializer.is_valid():
if user.role == "TEACHER":
if user.homeroom == request.data['user'].room:
Response({"message": "You don't have permission to perform this action 1"},
status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif perms is not None:
if user.role != 'STUDENT' and user.perms.is_monitor:
if user.room != request.data['user'].room:
Response({"message": "You don't have permission to perform this action 2"},
status=status.HTTP_400_BAD_REQUEST)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response({"message": "You don't have permission to perform this action 3"}, status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
ошибка находится в request.data['user'].room:
, так как django говорит 'str' object has no attribute 'room'
Попытка доступа к serializer.validated_data для получения экземпляра пользователя:
if serializer.is_valid():
if user.role == "TEACHER":
if user.homeroom == serializer.validated_data['user'].room:
Response({"message": "You don't have permission to perform this action 1"},
status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif perms is not None:
if user.role != 'STUDENT' and user.perms.is_monitor:
if user.room != serializer.validated_data['user'].room:
Response({"message": "You don't have permission to perform this action 2"},
status=status.HTTP_400_BAD_REQUEST)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response({"message": "You don't have permission to perform this action 3"}, status=status.HTTP_400_BAD_REQUEST)
Ваш request.data содержит только данные, отправленные в представление в переменных str. validated_data содержит очищенные данные из сериализатора с экземпляром retrieve, связанным с внешним ключом, если ваша модель установлена правильно