簡體   English   中英

Django Admin表單:設置只讀字段的默認值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM