Django Serializer - 在 Django 模型字段中包括
Django Serializer - non django model fileds include
我想列出我所有员工的详细信息。
我正在使用 Django 序列化程序。
我的模特
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"
我的序列化器
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']
我的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)
目前我的结果
[
{
"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
}
]
}
]
我想为此添加一个额外的数据..我想添加一个额外的字段 Rfid = true,如果 RFID 存在,如果 Rfid 不存在,Rfid= false
[
{
"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
}
]
}
]
我想得到如上所示的结果。额外的字段 Rfid 不存在于模型中,其详细信息与另一个模型 RFID 相关..
我怎样才能得到这种类型的输出
我该怎么做
使用serializers.SerializerMethodField
--DRF doc
class EmployeeSerializer(serializers.ModelSerializer):
<b>Rfid = serializers.SerializerMethodField()</b>
# other fields
<b>def get_Rfid(self, instance):
return instance.rfid_set.exists()</b>
class Meta:
model = Employee
fields = [other fields ,<b>'Rfid'</b>]
我想列出我所有员工的详细信息。 我正在使用 Django 序列化程序。
我的模特
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"
我的序列化器
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']
我的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)
目前我的结果
[
{
"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
}
]
}
]
我想为此添加一个额外的数据..我想添加一个额外的字段 Rfid = true,如果 RFID 存在,如果 Rfid 不存在,Rfid= false
[
{
"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
}
]
}
]
我想得到如上所示的结果。额外的字段 Rfid 不存在于模型中,其详细信息与另一个模型 RFID 相关..
我怎样才能得到这种类型的输出 我该怎么做
使用serializers.SerializerMethodField
--DRF doc
class EmployeeSerializer(serializers.ModelSerializer):
<b>Rfid = serializers.SerializerMethodField()</b>
# other fields
<b>def get_Rfid(self, instance):
return instance.rfid_set.exists()</b>
class Meta:
model = Employee
fields = [other fields ,<b>'Rfid'</b>]