-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

對不起,首先我誤解了你的問題,我按照你想要的方式編輯它。您實際上正確使用它,但是當序列化外鍵字段時,您需要使用實際字段名稱而不是相關名稱 –