-1

在串行器即时试图显示人员数据到员工,但即时获取此错误AttributeError当试图获取字段persons在串行器EmployeeSerializer上的值。 串行器字段可能命名错误,并且不匹配Employee实例上的任何属性或密钥。 原始异常文本为:'员工'对象没有'人员'属性。Django串行器,外键错误

这里是我的models.py

class Person(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=50) 
    curp = models.CharField(max_length=50) 
    rfc = models.CharField(max_length=12) 
    gender = models.CharField(max_length=20) 



class Employee(models.Model): 
    id = models.IntegerField(primary_key=True) 
    joining_date = models.DateField() 
    salary = models.DecimalField(18, decimal_places=2, max_digits=50) 
    status = models.IntegerField() 
    person = models.ForeignKey(Person, related_name='persons', on_delete=models.CASCADE) 
    user = models.ForeignKey(User) 
    branch = models.ForeignKey(Branch) 

串行器

class PersonSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Person 
     fields = ('name', 'curp', 'rfc', 'gender') 

class EmployeeSerializer(serializers.ModelSerializer): 
    persons = PersonSerializer(many=True) 


    class Meta: 
     model = Employee 
     fields = ('persons') 

这是我第一次在Django的工作,所以我不明白如何调用foreing键。 在我的数据库中,我有3个外键(用户,人员和分支)的表员工 谢谢!

回答

-1

在你的员工序列化,你应该改名字的人变量来的人,我认为,因为只有一个人会与员工对象有关,你可以将许多更改为False

class EmployeeSerializer(serializers.ModelSerializer): 
    person = PersonSerializer(many=False,) 


    class Meta: 
     model = Employee 
     fields = ('person') 
+0

所以,如果我想返回所有来自Person的数据将不得不添加返回中的所有字段,并在序列化程序中逐个添加? – Akarok

+0

对不起,首先我误解了你的问题,我按照你想要的方式编辑它。您实际上正确使用它,但是当序列化外键字段时,您需要使用实际字段名称而不是相关名称 –