django 如何更改CharField的大小

6kkfgxo0  于 2023-01-21  发布在  Go
关注(0)|答案(2)|浏览(175)

这段代码正在改变类中所有字符域的大小。我怎样才能改变一个字符域的大小?

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

fumotvh31#

定义覆盖字段小部件的自定义模型表单:

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'})只会影响表单字段在模型管理中的显示方式,如果你想改变数据库中列的长度,你应该设置max_length

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

r7s23pms2#

例如,下面有**first_namelast_name字段**,它们都是**Person模型**中的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

然后,下面的两组代码只能通过将PersonForm赋值给PersonAdmin中的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字段**:

相关问题