比方說,我有兩個Django模型ModelA和ModelB。 ModelA的一個對象的創建應該在某些情況下觸發ModelB的一個對象的創建。目前,不使用Tastypie,我有一個控制對象的創建以下觀點:使用Tastypie和Django創建多個POST請求的對象的正確方法
def new_A_created_view(request):
post_data = json.loads(request.body)
... parse post arguments ...
a = ModelA.objects.create(...)
if conditions_are_met(...):
b = ModelB.objects.create(...)
現在我想過渡到一個REST API,並使用TastyPie我有以下資源:
class ModelAResource(ModelResource):
class Meta:
queryset = ModelA.objects.all()
authorization = Authorization()
...
def hydrate(self, bundle):
if bundle.request.META['REQUEST_METHOD'] == 'POST':
...compute objects attributes from received post data ...
我知道以下選項來創建相應的B對象:
覆蓋保存或post_save方法。覆蓋Save方法或MODELA添加post_save信號,對象B的創作緊跟節約A.問題的行爲我在這種方法中看到:
- 創建對象的ModelB可能不取決於邏輯屬性出現在A中,而是包含在POST請求中的參數中。
- 我失去了views.py中很好的'控制器'邏輯,轉而使用模型中更隱蔽的邏輯。
覆蓋Resource.obj_create在ModelAResource因此它創建一個對象MODELA以及基於所述資源POST信息的ModelB對象(如果需要)。在這種情況下,我覺得物體的創作在某種程度上被遮蔽了。
我失蹤的任何解決方案?什麼是最好的方法來做到這一點?
你能告訴我們ModelA和ModelB是如何在'models.py'中聲明的嗎?他們都有彼此的關係嗎? – adityasdarma1
在我的具體情況下,ModelA將ModelB作爲其領域之一。所以在ModelA裏面會有一個定義爲object_b = models.ForeignKey(ModelB)的字段。儘管ModelB與ModelA沒有直接關係。 –