title: How to include custom functions in django serializers?
body: <p>I've been trying all sorts of method but still cant seem to get this task done even through asking here with my previous questions. The problem is, I am trying to convert my data that is entered by the user on django's admin page to json data using rest. But before converting the data to json, I have 2 custom functions that validates the email and phone number fields entered by the user that uses packages from PyPI and I need these functions to run through the entered text values on the admin page. I dont know where to put my 2 functions in my python files, whether in models.py or serializers.py, Ive actually tried both ways but cant seem to get it to work. </p>
  
  <pre><code>/* models.py */ 
  
  import re
  import phonenumbers
  from django.db import models
  from phonenumbers import carrier
  from validate_email import validate_email
  
  
  class razer(models.Model):
      emailplus = models.EmailField()
      country = models.CharField(max_length=2)
      phone_number = models.CharField(max_length=100)
  
      def clean_emailplus(self):
          email = self.cleaned_data.get("emailplus")
          if not validate_email(email, check_mx=True, verify=True):
              raise models.ValidationError("Invalid email")
          return email
  
      def clean_phone_number(self):
          phone_number = self.cleaned_data.get("phone_number")
          clean_number = re.sub("[^0-9&amp;^+]", "", phone_number)
          # alpha_2 = self.cleaned_data.get("country")
          alpha_2 = self.cleaned_data.get("country")
          z = phonenumbers.parse(clean_number, "%s" % (alpha_2))
          if len(clean_number) &gt; 15 or len(clean_number) &lt; 3:
              raise forms.ValidationError(
                  "Number cannot be more than 15 or less than 3")
          if not phonenumbers.is_valid_number(z):
              raise forms.ValidationError(
                  "Number not correct format or non-existent")
          if carrier.name_for_number(z, "en") == '':
              raise forms.ValidationError("Please enter a mobile number")
          return phonenumbers.format_number(
              z, phonenumbers.PhoneNumberFormat.E164)
  
      def __str__(self):
          return self.emailplus
  
  /* serializers.py */ 
  import re
  import phonenumbers
  from rest_framework import serializers
  from .models import razer
  from phonenumbers import carrier
  from validate_email import validate_email
  
  
  class razerSerializer(serializers.ModelSerializer):
  
      class Meta:
          model = razer
          fields = ('emailplus', 'country', 'phone_number')
  
  /* views.py */ 
  from django.shortcuts import render
  from django.http import HttpResponse
  from django.shortcuts import get_object_or_404
  from rest_framework.views import APIView
  from rest_framework.response import Response
  from rest_framework import status
  from .models import razer
  from .serializers import razerSerializer
  
  
  class razerList(APIView):
  
      def get(self, request):
          razer1 = razer.objects.all()
          serializer = razerSerializer(razer1, many=True)
          return Response(serializer.data)
  
      def post(self):
          pass
  </code></pre>
  
  <p>Also if I put the phonenumber and email fields in my serializers.py as in phone_number = serializers.CharField(), and then put the 2 custom functions as well, do I have to register serializer as a model and what should my views.py be changed into as it is using models.py currently . Please tell me what changes should be made, as I need to validate the text values entered by the users on the admin page on the registered model or via another method where users can enter the text separately.</p>