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 )

管理インターフェイスの「descr」フィールドに TextArea ウィジェットを割り当てる方法は?

更新:
管理インターフェースのみ!

ModelForm を使用することをお勧めします。

4

9 に答える 9

103

フィールドをforms.ModelFormどのように表示するかを説明するを作成し、そのフォームを使用するように指示する必要があります。例えば:descradmin.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

form属性はadmin.ModelAdmin、Django の公式ドキュメントに記載されています。ここに注目すべき1つの場所があります

于 2009-01-10T05:57:05.513 に答える
64

この場合、モデルで CharField の代わりに TextField を使用するのがおそらく最適なオプションです。クラスのformfield_for_dbfieldメソッドをオーバーライドすることもできます。ModelAdmin

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
于 2009-01-10T17:46:50.637 に答える
35

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 のフィールドを再定義する必要はありません。Meta でウィジェットの dict を設定するだけです。

于 2011-06-05T20:00:40.510 に答える
15

フォーム クラスを自分で作成する必要はありません。

from django.contrib import admin
from django import forms

class MyModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        kwargs['widgets'] = {'descr': forms.Textarea}
        return super().get_form(request, obj, **kwargs)

admin.site.register(MyModel, MyModelAdmin)

ModelAdmin.get_formを参照してください。

于 2018-05-25T04:29:16.693 に答える
14

必要なformfieldメソッドを使用して、独自のフィールドをサブクラス化できます。

class CharFieldWithTextarea(models.CharField):

    def formfield(self, **kwargs):
        kwargs.update({"widget": forms.Textarea})
        return super(CharFieldWithTextarea, self).formfield(**kwargs)

これは、生成されたすべてのフォームに影響します。

于 2009-01-10T06:02:15.270 に答える
5

の代わりに、 for をmodels.CharField使用します。models.TextFielddescr

于 2009-01-10T05:46:47.877 に答える