Sto lavorando a un progetto usando django-rest-framework. Nella mia vista API, un utente autenticato può creare altri utenti. Ma solo cinque. Quindi se ci sono cinque utenti registrati da un utente, desidero inviarlo nella risposta che ha raggiunto il limite. Quindi, ho bisogno di ottenere sul mio serializzatore l'utente autenticato ma, non riesco a trovare un modo per passarlo dal mio ModelViewSet al mio serializzatore.Come ottenere l'utente autenticato sulla classe serializzatore per la convalida
Questo è il mio codice:
Vista:
class ChildUserViewSet(viewsets.ModelViewSet):
serializer_class = ChildUserSerializer
queryset = User.objects.all()
authentication_classes = (
TokenAuthentication,
)
permission_classes = (
IsAuthenticated,
)
def perform_create(self, serializer):
account_group = self.request.user.userprofile.get_account_group
mobile_number = serializer.data.get('mobile_number')
password = serializer.data.get('password')
user = serializer.save()
user.set_password(password)
user.save()
# Generate user profile
UserProfile.objects.create(
user=user,
mobile_number=mobile_number,
user_type=CHILD,
related_account_group=account_group,
)
Serializer:
class ChildUserSerializer(serializers.ModelSerializer):
mobile_number = serializers.CharField()
class Meta:
model = User
fields = (
'first_name',
'last_name',
'email',
'password',
'mobile_number',
)
def validate(self, data):
"""
Check that the start is before the stop.
"""
# Get authenticated user for raise hit limit validation
def validate_email(self, value):
if User.objects.filter(email=value):
raise serializers.ValidationError("This field must be unique.")
return value
def create(self, validated_data):
username = generate_unique_username(
u'{0}{1}'.format(
validated_data['first_name'],
validated_data['last_name'],
)
)
user = User(
username=username,
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
email=validated_data['email'],
)
user.set_password(validated_data['password'])
user.save()
return user
Poi, nella funzione def validate(self, data)
della mia serializzatore, voglio ottenere l'utente attualmente autenticato.
Come posso passare request.user dalla mia APIView al mio serializzatore?