【问题标题】:How to Get Data Join Django Rest Framework如何获取数据加入 Django Rest 框架
【发布时间】:2021-05-26 09:48:00
【问题描述】:

我想加入两张桌子, 我有模特:

员工:

class Employee(models.Model):
    employee_identity = models.CharField(max_length=255, blank=True, null=True)
    full_name = models.CharField(max_length=255, blank=True, null=True)
    place_birth = models.CharField(max_length=255, blank=True, null=True)
    date_birth = models.DateField(blank=True, null=True)
    role = models.CharField(max_length=255, blank=True, null=True)
    no_hp = models.CharField(max_length=255, blank=True, null=True)
    address = models.CharField(max_length=255, blank=True, null=True)
    class Meta:
        managed = False
        db_table = 'employee'

处罚:

class Penalty(models.Model):
    employee = models.ForeignKey(Employee,on_delete=models.CASCADE)
    type = models.CharField(max_length=255, blank=True, null=True)
    start_date = models.DateField(blank=True, null=True)
    end_date = models.DateField(blank=True, null=True)
    doc = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'penalty'

我的员工序列化器:

class EmployeeSerializer (serializers.ModelSerializer):
    class Meta:  
        model = Employee
        fields = '__all__'

我的 PenaltySerializer:

class PenaltySerializer (serializers.ModelSerializer):
    class Meta:
        model = Penalty
        fields = ('employee','type','start_date','end_date')

我预期的点球结果:

"results": [
        {
            "employee": 14871,
            "type": "low",
            "start_date": "2018-10-15",
            "end_date": "2018-10-16",
            "employee_identity": "A1738129",
            "full_name": "Full name here",
            "role": "staff"
           
        }
    ]

我尝试在我的序列化程序中使用它

class PenaltySerializer (serializers.ModelSerializer):
 a = EmployeeSerializer(many=True,read_only=True)
        class Meta:
            model = Penalty
            fields = ('employee','type','start_date','end_date','a')

但是 'a' 的结果没有显示出来。

【问题讨论】:

    标签: mysql django api rest django-rest-framework


    【解决方案1】:

    我认为这可能会有所帮助

    class PenaltySerializer (serializers.ModelSerializer):
            employee_identity = serializers.CharField(source="employee.employee_identity")
             full_name = serializers.CharField(source="employee.full_name")
             role = serializers.CharField(source="employee.role")
    
            class Meta:
                model = Penalty
                fields = (
                        'employee',
                        'type',
                        'start_date',
                        'end_date', 
                       'employee_identity',
                       'full_name',
                       'role'
                )
    

    【讨论】:

      【解决方案2】:

      你可以在你的序列化器中做这样的事情:

      class PenaltySerializer (serializers.ModelSerializer):
          employee = serializers.SerializerMethodField()
          class Meta:
              model=Penalty
              fields = '__all__'
          
          def get_employee(self, object):
              return EmployeeSerializer(object.employee.all(), many=True).data
      

      【讨论】:

      • 我收到错误“在序列化程序 PenaltySerializer 上声明了字段 'employee',但未包含在 'fields' 选项中。”
      • 尝试分别添加字段值,包括员工字段。
      • 好吧,我尝试使用 fields = 'all' 更改字段,现在错误 'Employee' object has no attribute 'all'
      • 你不能做'所有',你应该做'所有'。或者,您应该单独添加每个字段,就像您在问题上所做的那样。
      • 同样的错误,我分别添加每个字段但得到错误'Employee' object has no attribute 'all'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2017-06-23
      相关资源
      最近更新 更多