Search code examples
djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-serializer

how to add current active user as foreign key to the create post model in djangorestframework?


how to add current active user as foreign key to the create post model in djangorestframework ?

models:

class DoctorProfile(AbstractBaseUser, PermissionsMixin):
    id=models.AutoField(primary_key=True)
    name = models.CharField(_('name'), max_length=50, blank=True)
    mobile = models.CharField(_('mobile'), unique=True, max_length=10, blank=False)
    email = models.EmailField(_('email address'), blank=True)
    password = models.CharField(_('password'),max_length=25,blank=False)
    otp = models.IntegerField(null=True, blank=True)
      
class Doctor_clinic(models.Model):
    clinic_id = models.AutoField(primary_key=True)
    doc_profile = models.ForeignKey(DoctorProfile,on_delete=models.CASCADE)
    clinic_name = models.CharField(max_length=150)
    clinic_address = models.CharField(max_length=150)
    City = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    pincode = models.IntegerField()
    

#how to get the forign key in serializers

I wrote in this way, is this correct/relevent?

   class UserSerializer(serializers.ModelSerializer):
        # mobile = serializers.RegexField("[0-9]{10}",min_length=10,max_length=10)
        password = serializers.CharField(write_only=True)
        email=serializers.EmailField(max_length=155,min_length=3,required=True)
        name=serializers.CharField(max_length=55,min_length=3,required=True)

        class Meta:
            model = DoctorProfile
            fields = ("name", "email", "password", "mobile","otp")

class ClinicSerializer(serializers.ModelSerializer):
    class Meta:
        model = Doctor_clinic
        fields =('clinic_name','clinic_address', 'City', 'state', 'pincode','doc_profile')

views:

class ClinicRegistrationView(generics.ListCreateAPIView):
    serializer_class = ClinicSerializer
    queryset = Doctor_clinic.objects.all()
    permission_classes = (IsAuthenticated,)

Solution

  • permissions.py

    use permission classes

    class IsOwner(permissions.BasePermission):

     def has_object_permission(self, request, view, obj):
         return obj.doc_profile == request.user
    

    views.py

        def perform_create(self, serializer):
            return serializer.save(doc_profile=self.request.user)