[英]Django Admin Form, Set the default value of readonly Field (User Foreign Key Field )
[英]Django Admin Form: Set the default value of a readonly field
目標:創建和更新資源時,在django管理表單上顯示特定於請求的只讀user_id
。
此顯示應該是一個只讀字段( readonly ,未禁用)。 顯示的user_id
是從發出請求的用戶( request.user
)派生的,因此可以從中設置初始值。
在這篇文章之后 ,我們應該像這樣簡單地在get_form
方法中進行設置:
def get_form(self, request, obj=None, *args, **kwargs):
form = super(ProfileAdmin, self).get_form(request, *args, **kwargs)
form.base_fields['user'].initial = request.user
return form
但是,當用戶為只讀時,它不再位於base_fields
。 實際上,我在任何地方都找不到它。 有什么想法嗎?
其他帖子建議保存,我打算這樣做,但在此之前我需要將其顯示在表單上。
正確的是,將字段設置為只讀會將其從base_fields中排除。如文檔所述 :
此選項中的任何字段(應為列表或元組)將按原樣顯示其數據,並且不可編輯; 它們也從用於創建和編輯的ModelForm中排除。
您可以像list_display一樣為它定義一個方法,但是由於需要從請求中設置用戶,因此我們需要有request對象,該對象在該方法中不可用。
因此,對於您的用例,我們可以使用formfield_for_foreignkey方法:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'lend_by':
# setting the user from the request object
kwargs['initial'] = request.user.id
# making the field readonly
kwargs['disabled'] = True
return super().formfield_for_foreignkey(db_field, request, **kwargs)
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.