Ehsan Fouladi
Ehsan Fouladi

Reputation: 11

Django Rest Framework not showing updated field until server restart

I am using DFR. when I send patch request for updating Patient record it changes in database and I can see it in admin panel, yet the response api request doesn't change until I restart the server. Patient Model:

class Patient(models.Model):
user = models.OneToOneField(
    settings.AUTH_USER_MODEL,
    on_delete=models.CASCADE
)
firstName = models.CharField(max_length=255)
lastName = models.CharField(max_length=255)
birthdate = models.DateField(auto_now_add=False, null=True, blank=True)
nationalCode = models.CharField(max_length=10)
address = models.TextField(blank=True)
cellphone = models.CharField(max_length=15, blank=True)
haveInsurance = models.BooleanField(default=False)
insuranceNumber = models.CharField(max_length=20, blank=True)
image = models.ImageField(null=True,blank=True, upload_to=patient_image_file_path)
patientHistory = models.ForeignKey(
    'PatientHistory',
    on_delete=models.CASCADE,
    blank=True, null=True)

def __str__(self):
    return self.firstName + ' ' + self.lastName

Patient Viewset:

class PatientViewSet(viewsets.ModelViewSet):
"""viewset for listing and creating patients"""
serializer_class = serializers.PatientSerializer
queryset = Patient.objects.all().order_by('-lastName')
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAdminUser | IsObjectOwner,)

def get_queryset(self):
    firstName = self.request.query_params.get('first_name')
    lastName = self.request.query_params.get('last_name')
    insuranceNumber = self.request.query_params.get('insurance_number')
    cellphone = self.request.query_params.get('cellphone')
    queryset = self.queryset
    if firstName:
        queryset = queryset.filter(firstName=firstName)
    if lastName:
        queryset = queryset.filter(lastName=lastName)
    if insuranceNumber:
        queryset = queryset.filter(insuranceNumber=insuranceNumber)
    if cellphone:
        queryset = queryset.filter(cellphone=cellphone)
    return queryset
   

def perform_create(self, serializer):
    if self.request.user.is_staff:
        email = self.request.data['email']
        cellphone = self.request.data['cellphone']
        name = self.request.data['firstName'] + " " + self.request.data['lastName']
        if get_user_model().objects.filter(email=email).exists():
            user = get_user_model().objects.get(email=email)
        else:
            user = get_user_model().objects.create_user(
                email=email,
                password=cellphone,
                name=name
                )
    else:
        user = self.request.user

    haveInsurance = True if 'insuranceNumber' in self.request.data else False
    user.is_patient = True
    user.save()
    serializer.save(
        user=user,
        haveInsurance=haveInsurance
    )

Patient Serializer:

class PatientSerializer(serializers.ModelSerializer):
"""Serializer for Patient objects"""
patientHistory = serializers.SerializerMethodField()
class Meta:
    model = Patient
    fields = [
        'id',
        'firstName',
        'lastName',
        'birthdate',
        'nationalCode',
        'address',
        'cellphone',
        'haveInsurance',
        'insuranceNumber',
        'patientHistory',
        'image'
    ]
    read_only_fields = ['id']

def get_patientHistory(self, obj):
    patientHistory = obj.patientHistory
    return patientHistory

I think in some way I need to make ViewSet to rerender or something, or maybe it's I need to add an update method. Does anyone know what makes the bug?

Upvotes: 0

Views: 647

Answers (1)

Ehsan Fouladi
Ehsan Fouladi

Reputation: 11

it seemed it was the get_queryset method.

queryset=self.queryset 

changed it to

queryset=Patient.objects.all()

solved the problem

Upvotes: 1

Related Questions