簡體   English   中英

如何更改 CharField 的大小

[英]How to change size of CharField

此代碼正在更改 class 中所有 CharField 的大小。如何更改一個 CharField 的大小?

formfield_overrides = {
    models.CharField: {'widget': TextInput(attrs={'size': '20'})},
}

定義一個自定義模型形式,該形式將覆蓋您的字段的小部件:

from django import forms

class MyForm(forms.ModelForm):
    class Meta:
        widgets = {
            'my_field': forms.TextInput(attrs={'size': '20'}),
        }

然后在模型管理員中使用您的表單:

class MyModelAdmin(admin.ModelAdmin):
    form = MyForm
    ...

請注意,設置TextInput(attrs={'size': '20'})僅會影響在模型admin中顯示表單字段的方式。 如果要更改數據庫中列的長度,則應設置max_length

class MyModel(models.Model):
    my_field = models.CharField(max_length=20)

例如,下面的Person model中有first_namelast_name字段都是CharField()

# "models.py"

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=20) # Here
    last_name = models.CharField(max_length=20) # Here

然后,下面的 2 組代碼只能通過將PersonAdmin分配給PersonForm中的form來更改first_name字段的大小:

# "admin.py"

from django import forms
from django.contrib import admin
from .models import Person

class PersonForm(forms.ModelForm): # Here
    class Meta:
        widgets = {
            'first_name': forms.TextInput(attrs={'size':'10'}),
        }

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    form = PersonForm # Here

或者:

# "admin.py"

from django import forms
from django.contrib import admin
from .models import Person

class PersonForm(forms.ModelForm): # Here
    first_name = forms.CharField(
        widget=forms.TextInput(attrs={'size':'10'})
    )

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    form = PersonForm # Here

然后,在“添加”和“更改”頁面上只更改first_name字段的大小,如下所示:

在此處輸入圖像描述

在此處輸入圖像描述

但是,將PersonForm分配給PersonAdmin中的form不會更改“更改列表”頁面first_name字段的大小。

因此,如果使first_namelast_name字段可編輯,如下所示:

# "admin.py"

# ...

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name') # Here
    list_editable = ('first_name', 'last_name') # Here
    list_display_links = None # Here
    
    form = PersonForm

然后, “更改列表”頁面first_name字段的大小未更改,如下所示:

在此處輸入圖像描述

但是,如果使用formfield_overrides如下所示:

# "admin.py"

from django.contrib import admin
from .models import Person
from django.db import models
from django import forms

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name')
    list_editable = ('first_name', 'last_name') 
    list_display_links = None # Here
    
    formfield_overrides = { # Here
        models.CharField: {'widget': forms.TextInput(attrs={'size': '10'})},
    }

不僅first_name字段的大小而且last_name字段的大小都在“更改列表”頁面上更改,如下所示。 *我不知道如何只更改“更改列表”頁面上的first_name字段

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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