I'm using DRF. I have a User model and contacts field in it and contacts are also User instances.
class User(AbstractBaseUser, PermissionsMixin):
first_name = models.CharField(
_("first name"),
max_length=30,
blank=True,
)
last_name = models.CharField(
_("last name"),
max_length=150,
blank=True,
)
phone_number = PhoneNumberField(
unique=True,
blank=False,
null=True
)
contacts = models.ManyToManyField("User", blank=True)
This is the serializer.
class AddContactSerializer(serializers.Serializer):
phone_number = serializers.CharField(max_length=12, write_only=True, required=True)
def update(self, instance, validated_data):
user = self.context['request'].user
phone_number = validated_data["phone_number"]
added_contact = User.objects.get(phone_number=phone_number)
user.contacts.add(added_contact)
return UserSerializer(added_contact)
And the view.
class AddContact(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
serializer = AddContactSerializer(
request.user, data=request.data, context={"request": request})
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors)
I'll need to add error handling though.
Thank you for reviewing this.