首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django-管理员:以TextArea身份使用CharField

Django-管理员:以TextArea身份使用CharField
EN

Stack Overflow用户
提问于 2009-01-10 05:10:24
回答 9查看 86.2K关注 0票数 97

我有过

class Cab(models.Model):
    name  = models.CharField( max_length=20 )
    descr = models.CharField( max_length=2000 )

class Cab_Admin(admin.ModelAdmin):
    ordering     = ('name',)
    list_display = ('name','descr', )
    # what to write here to make descr using TextArea?

admin.site.register( Cab, Cab_Admin )

如何在管理界面中将TextArea小工具分配给'descr‘字段?

更新:

仅在管理界面中!

使用ModelForm是个好主意。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-01-10 05:57:06

您必须创建一个forms.ModelForm来描述您希望如何显示descr字段,然后告诉admin.ModelAdmin使用该表单。例如:

from django import forms
class CabModelForm( forms.ModelForm ):
    descr = forms.CharField( widget=forms.Textarea )
    class Meta:
        model = Cab

class Cab_Admin( admin.ModelAdmin ):
    form = CabModelForm

admin.ModelAdminform属性记录在官方的Django文档中。这是one place to look at

票数 103
EN

Stack Overflow用户

发布于 2009-01-10 17:46:51

对于这种情况,最好的选择可能就是在模型中使用TextField而不是CharField。您还可以覆盖ModelAdmin类的formfield_for_dbfield方法:

class CabAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        formfield = super(CabAdmin, self).formfield_for_dbfield(db_field, **kwargs)
        if db_field.name == 'descr':
            formfield.widget = forms.Textarea(attrs=formfield.widget.attrs)
        return formfield
票数 64
EN

Stack Overflow用户

发布于 2011-06-06 04:00:41

Ayaz有很大的优势,除了一个小的变化(?!):

class MessageAdminForm(forms.ModelForm):
    class Meta:
        model = Message
        widgets = {
            'text': forms.Textarea(attrs={'cols': 80, 'rows': 20}),
        }

class MessageAdmin(admin.ModelAdmin):
    form = MessageAdminForm
admin.site.register(Message, MessageAdmin)

因此,您不需要在ModelForm中重新定义字段来更改其窗口小部件,只需在元数据中设置窗口小部件字典即可。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/430592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档