max*_*axp 79 django django-admin
我有
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 )
Run Code Online (Sandbox Code Playgroud)
如何在管理界面中将TextArea小部件分配给'descr'字段?
UPD:
在管理员唯一接口!
使用ModelForm的好主意.
aya*_*yaz 89
您将必须创建一个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
Run Code Online (Sandbox Code Playgroud)
该form属性admin.ModelAdmin记录在Django官方文档中.这是一个值得关注的地方.
Car*_*yer 52
对于这种情况,最好的选择可能只是在模型中使用TextField而不是CharField.您还可以覆盖类的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
Run Code Online (Sandbox Code Playgroud)
Gez*_*zim 31
除了稍微改变(?!)之外,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)
Run Code Online (Sandbox Code Playgroud)
因此,您不需要重新定义ModelForm中的字段来更改它的窗口小部件,只需在Meta中设置窗口小部件字典即可.
Ale*_*lev 13
您可以使用所需formfield方法为您自己的字段创建子类:
class CharFieldWithTextarea(models.CharField):
def formfield(self, **kwargs):
kwargs.update({"widget": forms.Textarea})
return super(CharFieldWithTextarea, self).formfield(**kwargs)
Run Code Online (Sandbox Code Playgroud)
这将对所有生成的表单产生影响.
您不需要自己创建表单类:
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)
Run Code Online (Sandbox Code Playgroud)
models.CharField使用models.TextFieldfor代替a descr。
如果您尝试在admin.py上更改Textarea,这是适用于我的解决方案:
from django import forms
from django.contrib import admin
from django.db import models
from django.forms import TextInput, Textarea
from books.models import Book
class BookForm(forms.ModelForm):
description = forms.CharField( widget=forms.Textarea(attrs={'rows': 5, 'cols': 100}))
class Meta:
model = Book
class BookAdmin(admin.ModelAdmin):
form = BookForm
admin.site.register(Book, BookAdmin)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是MySQL数据库,您的列长度通常会自动设置为250个字符,因此您需要运行ALTER TABLE来更改MySQL数据库中的长度,以便您可以利用新的更大的Textarea.在你的Admin Django网站.
您可以models.TextField为此目的使用:
class Sample(models.Model):
field1 = models.CharField(max_length=128)
field2 = models.TextField(max_length=1024*2) # Will be rendered as textarea
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68660 次 |
| 最近记录: |