2017-10-16 82 views
1

我想創建一個API,允許通過POST請求發送JSON OneToOne關係。然後 的JSON應該得到轉嫁到串行這需要創建一個新的對象,並與現有的數據來填充它的照顧。Django的REST框架 - 通過JSON

它適用於'簡單'的情況,比如像用戶名和類似的基本字符輸入,但我在創建OneToOne關係時遇到了嚴重的困難。這裏是示例代碼。

函數employee_listviews.py - data['account']是一個有效的用戶名,User實例被成功選中!

data = JSONParser().parse(request) 
user_object = User.objects.get(username=data['account']) 
data['account'] = user_object # this is now a valid User object 
serializer = EmployeeSerializer(data=data) 
if serializer.is_valid(): 
    serializer.save() 
    return JsonResponse(serializer.data, status=201) 
return JsonResponse(serializer.errors, status=400) 

模型

class Employee(models.Model) 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(...) 
    surname = models.CharField... 
    account = models.OneToOneField(User) 
    role = ... 
    salary = ... 
    picture = ... 

和串行

class EmployeeSerializer(serializers.ModelSerializer): 
    class Meta: 
    model = Employee 
    fields = (...) # all fields of the `Employee` model 

到目前爲止好,但是,從來沒有串行驗證!當我刪除需要一個OneToOne關係,它的工作原理..

我怎樣才能創建一個工作OneToOne關係到用戶對象的新Employee對象?

在此先感謝。

+0

什麼是驗證錯誤?你可以在裏面通過raise_exception:is_valid(raise_exception = TRUE) – arjun27

+0

謝謝你的提示,甚至不知道這是可能的。它給了我確切的錯誤,因爲這個,我能夠獨自解決它。非常感謝! – fweidemann14

回答

2

您需要通過User對象的pk,而不是User對象。

解決方案

data['account'] = user_object.pk 
+0

是的,已經做過了。完美的作品。 – fweidemann14

1

的問題是因爲用戶對象被傳遞到串行化器,當它可剛剛通過串行化器,同時節省的對象。嘗試是這樣的:

data = JSONParser().parse(request) 
user_object = User.objects.get(username=data['account']) 
serializer = EmployeeSerializer(data=data) 

if serializer.is_valid(): 
    # pass object to save, instead of saving in the data dictionary 
    serializer.save(account=user_object) 
    return JsonResponse(serializer.data, status=201) 

return JsonResponse(serializer.errors, status=400) 
+0

是的,試過爲好,然後我看到了,我可以只使用主鍵來代替,這是比較容易的方式。無論如何Upvoted,也許這是幫助別人。 ;) – fweidemann14