在Django的ModelAdmin中,我需要顯示根據用戶擁有的權限自定義的表單。有沒有辦法讓當前用戶對象進入表單類,以便我可以在其__init__
方法中自定義表單?
我認爲當前的請求保存在一個線程本地將是一種可能性,但這將是我的最後手段認爲我認爲這是一個糟糕的設計方法....Django:如何獲取管理員表單中的當前用戶
回答
這裏是我最近的博客:
class BlogPostAdmin(admin.ModelAdmin):
form = BlogPostForm
def get_form(self, request, **kwargs):
form = super(BlogPostAdmin, self).get_form(request, **kwargs)
form.current_user = request.user
return form
我現在可以通過訪問訪問當前用戶在我forms.ModelForm
self.current_user
編輯:這是一個古老的答案,看它最近我才意識到get_form
方法應修改爲:
def get_form(self, request, *args, **kwargs):
form = super(BlogPostAdmin, self).get_form(request, *args, **kwargs)
form.current_user = request.user
return form
(注意*args
的加法)
我想我找到了一個解決方案,對我來說:創建一個ModelForm
Django使用管理員的formfield_for_db_field
-method作爲回調。
所以我在我的管理覆蓋此方法並傳入當前用戶對象與各個領域的屬性(這可能不是最有效的,但似乎比使用threadlocals清潔劑對我說:
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(MyAdmin, self).formfield_for_dbfield(db_field, **kwargs)
field.user = kwargs.get('request', None).user
return field
現在我可以喜歡的東西訪問當前用戶對象的形式__init__
:
current_user=self.fields['fieldname'].user
Joshmaker的回答對我而言並不適用於Django 1.7。以下是我對Django的1.7做:
class BlogPostAdmin(admin.ModelAdmin):
form = BlogPostForm
def get_form(self, request, obj=None, **kwargs):
form = super(BlogPostAdmin, self).get_form(request, obj, **kwargs)
form.current_user = request.user
return form
有關此方法的更多詳細信息,請參閱this relevant Django documentation
天才,我被卡在這個問題真正的努力 – bobleujr 2016-06-11 18:15:05
偶然發現了同樣的事情,這是第一款谷歌結果我page.Dint幫助,位更多的谷歌搜索和工作!
這裏是如何對我的作品(Django的1.7+):
class SomeAdmin(admin.ModelAdmin):
# This is important to have because this provides the
# "request" object to "clean" method
def get_form(self, request, obj=None, **kwargs):
form = super(SomeAdmin, self).get_form(request, obj=obj, **kwargs)
form.request = request
return form
class SomeAdminForm(forms.ModelForm):
class Meta(object):
model = SomeModel
fields = ["A", "B"]
def clean(self):
cleaned_data = super(SomeAdminForm, self).clean()
logged_in_email = self.request.user.email #voila
if logged_in_email in ['[email protected]']:
raise ValidationError("Please behave, you are not authorised.....Thank you!!")
return cleaned_data
可愛的小解決辦法,:) – 2018-01-16 10:24:15
謝謝老兄! :) – NoobEditor 2018-01-19 05:50:05
就可以解決這個問題的另一種方法是使用Django鑽營這不僅僅是請求對象加到表單清潔了一下模型。
from django.utils.functional import curry
class BlogPostAdmin(admin.ModelAdmin):
form = BlogPostForm
def get_form(self, request, **kwargs):
form = super(BlogPostAdmin, self).get_form(request, **kwargs)
return curry(form, current_user=request.user)
這額外的好處讓你的表單上的的init方法更清晰一點的人會明白,它被作爲kwarg過去了,不只是在初始化之前隨機附加屬性的類對象。
class BlogPostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.current_user = kwargs.pop('current_user')
super(BlogPostForm, self).__init__(*args, **kwargs)
這個用例是記錄在ModelAdmin.get_form
[...如果你想提供額外的字段超級用戶,你可以在不同的基本形式交換,像這樣:
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
kwargs['form'] = MySuperuserForm
return super().get_form(request, obj, **kwargs)
如果你只需要保存一個字段,那麼你可以只覆蓋ModelAdmin.save_model
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
super().save_model(request, obj, form, change)
- 1. 當前用戶在Django管理員
- 2. Spree - 如何獲取當前登錄的管理員用戶
- 3. 如何在Django管理面板中獲取當前記錄的用戶ID?
- 4. ModX Revo:獲取當前Web用戶或管理員會話
- 5. 管理員網站自動獲取當前用戶
- 6. 如何獲取通過活動管理員登錄的當前用戶?
- 7. Symfony2:SonataAdminBundle - 如何獲取表示管理類中當前用戶的對象?
- 8. 如何獲得用戶當前在Django管理站點的用戶權限
- 9. Django管理員用戶
- 10. 當以管理員身份運行時獲取當前登錄的用戶
- 11. 管理django中的列表管理員
- 12. 如何獲取當前用戶使用API從foursquare管理的場地列表?
- 13. 如何檢查當前用戶是管理員組的C#
- 14. 如何獲取Facebook中的頁面的管理員用戶ID?
- 15. 在django管理員表單中響應用戶操作?
- 16. 如何從非管理員用戶獲取當前登錄的用戶名,域名和用戶sid?
- 17. 如何在Django的forms.py中獲取當前用戶的ID?
- 18. django admin - 從i18n獲取對象的語言 - *不*當前語言的管理員
- 19. 如何在django 1.10中獲取當前的「用戶名」?
- 20. 獲取當前用戶和每個管理員之間的所有消息
- 21. 如何將html表單中的值傳遞給Django管理員?
- 22. 如何更改django管理員中的內嵌表單?
- 23. 與管理員Django-taggit獲取錯誤
- 24. Django將ManyToMany關係添加到管理員用戶表單
- 25. 獲取當前用戶在Django admin
- 26. django獲取當前用戶ID
- 27. Django,DataWizard,SessionWizardView獲取當前用戶
- 28. Django管理員爲用戶的對象
- 29. Django的:測試管理員用戶
- 30. 如何在django模型中獲取當前用戶?
這是一個'AttributeError':'kwargs.get( '請求',無).user' – hcalves 2012-03-19 19:07:34