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>]