Mysql 如何让数据加入Django Rest框架
我想加入两张桌子, 我有一个模型: 雇员:Mysql 如何让数据加入Django Rest框架,mysql,django,api,rest,django-rest-framework,Mysql,Django,Api,Rest,Django Rest Framework,我想加入两张桌子, 我有一个模型: 雇员: 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=
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'
My EmployeeSerializer:
class EmployeeSerializer (serializers.ModelSerializer):
class Meta:
model = Employee
fields = '__all__'
我的惩罚试金器:
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”的结果没有出现。我想这可能会有所帮助
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'
)
您可以在序列化程序中执行以下操作:
class PenaltySerializer (serializers.ModelSerializer):
class Meta:
model = Penalty
fields = ('employee','type','start_date','end_date')
类PenaltySerializer(serializers.ModelSerializer):
employee=serializers.SerializerMethodField()
类元:
模型=惩罚
字段='\uuuu所有\uuuu'
def get_员工(自身、对象):
返回EmployeeSerializer(object.employee.all(),many=True)
我收到错误“字段'employee'已在序列化程序PenaltySerializer上声明,但尚未包含在'fields'选项中。”尝试单独添加字段值,包括employee字段。我尝试更改字段为'all',现在错误'employee'对象没有属性'all',您不能执行'all',您应该执行'all'。或者,您应该单独添加每个字段,就像您在问题上所做的那样。同样的错误,我单独添加每个字段,但得到错误“Employee”对象没有属性“all”