如何區分例如來自常規視圖的post_save和來自管理員的post_save?來自管理員的Django信號
1
A
回答
2
有沒有一種簡單的方法來做到這一點,這意味着你可能不會使用post_save信號將你的代碼放在正確的位置。這就是說,如果你真的想,你可以使用threadlocal hack來訪問請求對象,並確定當前正在運行的視圖是否是管理視圖。要了解如何執行threadlocal攻擊,請從django cookbook開始,但只保存整個請求而不是用戶。請注意,很多人認爲threadlocal攻擊是可憎的。這是一個discussion。我認爲他們有一個非常有用的地方,但不知道更多,我猜想有一個更好的解決方案給你。
2
通過覆蓋ModelAdmin.response_add,您可能會得到類似的功能,因爲django admin似乎沒有發送任何信號。
response_add函數在成功驗證並添加了所有數據(例如相關字段,但也包括對象本身)之後被調用。
因此,通過覆蓋我們自己的ModelAdmin類中的response_add方法,我們可以在管理員添加成功後執行代碼,但不會在其他地方執行。
我在django 1.4中做了以下的方法,任何意見或反饋非常感謝!對我而言,它似乎運行良好,但我對Django中的所有內部結構並不熟悉,並且它是建議的方式。但這聽起來比對我的一個線索本地攻擊更好。
附註:我想你也可以通過覆蓋ModelAdmin自己發出信號,但是沒有經驗。
這是我用來覆蓋response_add的代碼,將執行product_get_initial_info(obj.id)只有在管理員已成功添加一個產品:
class ProductAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
inlines = [
ProductInline,
]
def response_add(self, request, obj, post_url_continue='../%s/'):
if obj and obj.id:
tasks.product_get_initial_info(obj.id)
return super(ProductAdmin, self).response_add(request, obj, post_url_continue='../%s/')
相關的Django的源代碼是在這裏: django/contrib/admin/options.py
class ModelAdmin(BaseModelAdmin):
def add_view(self, request,...)
# .... Many lines of code ...... not putting them here as they're not so relevant
if all_valid(formsets) and form_validated:
self.save_model(request, new_object, form, False)
self.save_related(request, form, formsets, False)
self.log_addition(request, new_object)
# After saving everything response_add gets called with the newly created object
return self.response_add(request, new_object)
相關問題
- 1. 顯示來自管理員信號的自定義消息
- 2. Django自定義管理員
- 3. Django管理員保存不發送與m2m_changed信號post_remove行動
- 4. Django管理員:發送現場變化信號
- 5. Django管理員DoesNotExist在/管理員/
- 6. Drupal:來自管理員/管理員的用戶評論
- 7. Stream導出的CSV導出(來自Heroku上的Django管理員)
- 8. Django管理員url.py
- 9. 保護來自網站集管理員的敏感信息
- 10. 管理django中的列表管理員
- 11. 如何自定義django管理員?
- 12. 用list_display自定義Django管理員?
- 13. Django管理員自定義CSV報告
- 14. Django管理員難以自定義嗎?
- 15. Django管理員自動保存
- 16. Django管理員密碼自動更改
- 17. 自定義選擇在Django管理員
- 18. Django自動生成S Admin管理員
- 19. 刪除添加另一個來自django管理員
- 20. django管理員自定義模型管理url
- 21. Django管理員:註冊額外的員工管理
- 22. 問題Django管理員
- 23. Django管理員過濾器
- 24. Django Guardian TemplateSyntaxError管理員
- 25. Django管理員顏色
- 26. django nonrel和管理員
- 27. 瞭解django管理員readonly_fields
- 28. Django管理員用戶
- 29. Django管理員。在list_display
- 30. django管理員操作
爲什麼你需要知道? –