我设法TextArea用两种不同的方式覆盖django管理界面中Widget 的外观:
在admin.py:
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': Textarea(
attrs={'rows': 1,
'cols': 40})},
}
...
admin.site.register(Rules, RulesAdmin)
Run Code Online (Sandbox Code Playgroud)
这种方式有点过分,因为它会改变该模型的所有TextField.
在forms.py:
from django.forms import ModelForm, Textarea
from TimePortal.models import Rules
class RulesModelForm(ModelForm):
class Meta:
model = Rules
widgets = {
'parameters': Textarea(attrs={'cols': 30, 'rows': 1}),
}
Run Code Online (Sandbox Code Playgroud)
在 admin.py
from AppName.forms import RulesModelForm
class RulesAdmin(admin.ModelAdmin):
form = RulesModelForm
Run Code Online (Sandbox Code Playgroud)
这两种解决方案调整TextArea.但是,在两种解决方案中,文本区域的实际大小超过1行(实际上是2行).以下是呈现的HTML的外观:
<div class="form-row field-parameters">
<div>
<label for="id_parameters" class="required">Parameters:</label>
<textarea id="id_parameters" rows="1" cols="30" name="parameters">{}</textarea> …Run Code Online (Sandbox Code Playgroud) 我正在做一个Django项目,当我尝试访问127.0.0.1:8000/articles/create时,我的Ubuntu终端出现以下错误:
/home/(my name)/django_test/article/forms.py:4: RemovedInDjango18Warning: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated - form ArticleForm needs updating
class ArticleForm(forms.ModelForm):
Run Code Online (Sandbox Code Playgroud)
另外,访问我的实际localhost站点时,我也遇到以下错误:
ValueError at /articles/create/
The view article.views.create didn't return an HttpResponse object. It returned None instead.
Run Code Online (Sandbox Code Playgroud)
这是我的forms.py文件:
from django import forms
from models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
Run Code Online (Sandbox Code Playgroud)
这是我的views.py文件:
from django.shortcuts import render_to_response
from article.models import Article
from django.http import HttpResponse
from forms import ArticleForm
from django.http import HttpResponseRedirect
from django.core.context_processors …Run Code Online (Sandbox Code Playgroud) 我有一个自定义TagField表单字段.
class TagField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TagField, self).__init__(*args, **kwargs)
self.widget = forms.TextInput(attrs={'class':'tag_field'})
Run Code Online (Sandbox Code Playgroud)
如上所示,它使用TextInput表单字段小部件.但在管理员中我希望它使用Textarea小部件显示.为此,有formfield_overrides钩子,但它不适用于这种情况.
管理声明是:
class ProductAdmin(admin.ModelAdmin):
...
formfield_overrides = {
TagField: {'widget': admin.widgets.AdminTextareaWidget},
}
Run Code Online (Sandbox Code Playgroud)
这对表单字段小部件没有影响,tags仍然使用TextInput小部件进行呈现.
任何帮助深表感谢.
-
omat
在Django admin中,如果我有一个Model字段,TextField并使用将该字段设置为readonly readonly_fields,那么它将在<p>标签中显示为文本。
我希望它仍显示为一个textarea字段,但要disabled设置其属性。
最简单的方法是什么?
我使用下面的模型,其中默认的 django 用户表与 Hotel 具有多对多关系。
在 django 管理面板中将多个用户分配给酒店很困难,我想将默认的“ctrl-click”方法替换为复选框,在该复选框中我可以选择多个用户而无需按住 ctrl。
模型:
from django.db import models
from django.contrib.auth.models import User
class Hotel(models.Model):
# associate the user
user = models.ManyToManyField(User)
# additional fields
hotel_name = models.CharField(max_length=100)
hotel_id = models.CharField(max_length=100)
def __str__(self):
return self.hotel_id
Run Code Online (Sandbox Code Playgroud)
管理员.py
from django.contrib import admin
from .models import *
from django.forms import CheckboxSelectMultiple
# Checkbox for many-to-many fields
class HotelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
admin.site.register(Hotel)
Run Code Online (Sandbox Code Playgroud)