i want to list my all employee details. i am using Django serializer.
my models
class RFID(models.Model):
RFID = models.AutoField(primary_key=True, db_column='RFID')
Employee = models.ForeignKey(Employee, on_delete=models.CASCADE, db_column='EmployeeId')
RFIDCode = models.BigIntegerField(unique=True, default=None, null=False, blank=False)
class Meta:
db_table = "RFID"
class Employee(models.Model):
EmployeeId = models.AutoField(primary_key=True, db_column='EmployeeId')
EmployeeCode = models.CharField(max_length=50, unique=True, null=False, blank=False)
EmployeeName = models.CharField(max_length=50)
EmployeeStatus = models.SmallIntegerField(default=1, null=True, blank=True)
Security = models.SmallIntegerField(default=0, null=True, blank=True)
Device = models.ManyToManyField(Device, through='EmployeeDevice')
class Meta:
db_table = "Employee"
my serilalizer
class RFIDSyncSerializer(serializers.ModelSerializer):
class Meta:
model = RFID
fields = ['RFID', 'RFIDCode']
class EmployeeSerializer(serializers.ModelSerializer):
rfid_set = RFIDSyncSerializer(read_only=True, many=True)
class Meta:
model = Employee
fields = ['EmployeeId', 'EmployeeName', 'EmployeeCode', 'EmployeeStatus', 'Security', 'rfid_set']
my views.py
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def employee_list(request):
try:
employee = employee = Employee.objects.filter(~Q(EmployeeStatus=2))
serializer = EmployeeSerializer(employee, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
except Exception as ex:
return Response({msg: repr(ex)}, status=status.HTTP_400_BAD_REQUEST)
currently my result
[
{
"EmployeeId": 21,
"EmployeeName": "ss",
"EmployeeCode": "10",
"EmployeeStatus": 1,
"Security": 0,
"rfid_set": []
},
{
"EmployeeId": 1,
"EmployeeName": "namechagnge",
"EmployeeCode": "Emp-01",
"EmployeeStatus": 1,
"Security": 0,
"rfid_set": [
{
"RFID": 74,
"RFIDCode": 408
}
]
}
]
i want to include an extra data to this.. i want to add an extra field Rfid = true , if RFID present and Rfid= false if Rfid not present
[
{
"EmployeeId": 21,
"EmployeeName": "ss",
"EmployeeCode": "10",
"EmployeeStatus": 1,
"Security": 0,
"Rfid": false,
"rfid_set": []
},
{
"EmployeeId": 1,
"EmployeeName": "namechagnge",
"EmployeeCode": "Emp-01",
"EmployeeStatus": 1,
"Security": 0,
"Rfid": true,
"rfid_set": [
{
"RFID": 74,
"RFIDCode": 408
}
]
}
]
i want to get the result as shown above. the extra fiels Rfid is not present in model and , its details related to the another model RFID..
How can i get this type of output How can i do this
Use serializers.SerializerMethodField
--DRF doc
class EmployeeSerializer(serializers.ModelSerializer):
Rfid = serializers.SerializerMethodField()
# other fields
def get_Rfid(self, instance):
return instance.rfid_set.exists()
class Meta:
model = Employee
fields = [other fields ,'Rfid']