2017-09-13 41 views
1

我有一個ModelSerializer,它有一個ForeignKey字段。這是模型的代碼:不會調用外鍵字段上的Django Rest Framework自定義驗證功能

class Attendance(models.Model): 
    employee = models.ForeignKey(Employee, related_name='attendance_times') 
    datetime = models.DateTimeField() 

,這是串行:

class AttendanceSerializer(serializers.ModelSerializer): 

    def validate_employee(self, value): 
     try: 
      Employee.objects.get(pk=value) 
     except Employee.DoesNotExist: 
      Employee.objects.create(pk=value) 
     return value 

    class Meta: 
     model = Attendance 
     fields = ('employee', 'datetime') 

的問題是,當我發送POST請求創建一個新的對象,函數validate_employee不叫和序列化程序返回驗證錯誤說:

pk「1321」無效 - 對象不存在。

這是怎麼發生的?難道我做錯了什麼?是否有另一個驗證程序在我的驗證程序之前被調用?

回答

0

在調用validate_<field>之前會發生一些事情。

特別是,該字段本身將執行初始驗證檢查並將傳入數據轉換爲Python對象。使用PrimaryKeyRelatedField它將檢查關聯的模型並返回實例。

+0

有沒有辦法來重寫驗證?我想創建一個新的對象,如果它不存在@linovia – Navid777

+0

有你自己的領域和重寫https://github.com/encode/django-rest-framework/blob/master/rest_framework/relations.py#L251 – Linovia