【问题标题】:Django Serializer - non django model fileds includeDjango Serializer - 非 Django 模型字段包括
【发布时间】:2020-07-21 06:51:36
【问题描述】:

我想列出我所有的员工详细信息。 我正在使用 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']

我的意见.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 存在,我想添加一个额外的字段 Rfid = true ,如果 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 相关..

我怎样才能得到这种类型的输出 我该怎么做呢

【问题讨论】:

    标签: python django django-models django-rest-framework django-serializer


    【解决方案1】:

    使用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']

    【讨论】:

    • 非常感谢.. 工作正常.. :) 谢谢 :)
    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多