2013-03-13 46 views
2

有一些類似於我的問題,但它們都沒有涉及我的特定公式。道歉,如果我錯過了一個涵蓋這一點。使用外鍵創建美食資源而不會將外鍵暴露爲資源

我有一個tastypie ModelResource表示一個帶有ForeignKey的模型。我希望能夠創建該類型的新資源,但我不想將外鍵的模型公開給api。

可以爲它添加資源,但我不希望任何外部的網站代碼能夠讀/寫外鍵。從迄今爲止我所嘗試的,tastypie似乎只能夠處理這種類型的外鍵,如果相應的外鍵模型也有一個可以創建的資源。我只是希望能夠創建引用現有外鍵對象的模型,而不允許創建新對象。

這是可以在tastypie完成的東西嗎?如果是這樣,我需要做什麼才能做到這一點?如果沒有,是否有某種解決方法/妥協?

回答

3

如果你不想在API上看到外鍵,那就不要在資源中爲它創建一個字段。 如果您需要在創建/更新時爲其指定一些值,則可以覆蓋此資源的obj_create/obj_update tastypie方法。例如:

def obj_create(self, bundle, request=None, **kwargs): 
    obj = super(YourResource, self).obj_create(bundle, request, **kwargs) 
    obj.yourforeighnkey = somevalue 
    obj.save() 
    return obj 
+0

我做了一些更多的研究,找到了一個類似於您的建議的解決方案,但如果它不是正確的方法,我不想提交它作爲答案做這件事。在我的資源上而不是將外鍵添加爲外鍵時,我只是將它添加爲與表示模型中的外鍵字段具有相同名稱的整數字段。這是做一個可接受的方法嗎?或者我應該重寫obj_create? – Alex 2013-03-13 16:13:31

+0

這取決於你想要什麼。如果你將它作爲一個整數字段添加,它將作爲整數字段通過api可見,如果你不設置它只讀,它可以通過api更改.. – Aldarund 2013-03-14 08:47:45

+0

爲我的目的,它的罰款,如果外鍵的主鍵是可見的,我想要阻止的是必須將整個外鍵對象添加到與引用它的模型具有相同權限的API。雖然我沒有考慮只讀部分,所以這絕對有幫助。如果我將其標記爲只讀,是否會阻止通過api創建新資源,或者是否存在創建資源的例外情況? – Alex 2013-03-14 14:00:22