Django - 指定 django.db.models.(???) 字段形式的宽度
Posted
技术标签:
【中文标题】Django - 指定 django.db.models.(???) 字段形式的宽度【英文标题】:Django - Specify width of django.db.models.(???)Field forms 【发布时间】:2015-12-01 18:20:40 【问题描述】:正如标题所说,我正在尝试缩小 Django 页面上几个字段的宽度。主要是CharField
、DecimalField
和IntegerField
,如果这有什么不同的话。
这是其中一个字段的示例
title = models.CharField(max_length=200)
我发现其他人使用了小部件但无法使其工作,这既是因为我不确定如何使用这些小部件,也可能是因为这些示例似乎都在使用 django.forms.CharField
。这是指向此类an example 的链接。我试过这样的例子:
title = models.CharField(max_length=200, widget=forms.Textarea(attrs='cols': 10, 'rows': 20))
还有:
title = models.CharField(max_length=200, widget=models.Textarea(attrs='cols': 10, 'rows': 20))
import django.db.models
和 import django.forms
这是我更新的文件:
models.py
class ChemRun(forms.Form):
title = forms.CharField(max_length=50, widget=forms.TextInput(attrs='style': 'width: 400px;' ))
created_date = forms.DateTimeField(initial=timezone.now)
status = forms.CharField(max_length=20, initial="In queue")
forms.py
class ChemRunForm(forms.Form):
class Meta:
model = ChemRun
exclude = ('created_date', 'status')
views.py
@verified_email_required
def create(request):
if request.POST:
form = ChemRunForm()
f = form.save(commit=False)
f.owner = request.user
f.save()
data = form.cleaned_data
initiate_run.delay(data)
return HttpResponseRedirect('/accounts/profile')
else:
form = ChemRunForm()
args =
args.update(csrf(request))
args['form'] = form
return render_to_response('interface/newrun.html', args, context_instance=RequestContext(request))
【问题讨论】:
真的很重要吗?它在底层 SQL 中将被定义为“title”varchar(200) NOT NULL。由于它是一个 varchar,因此即使缩小它也不会产生太大影响。 ***.com/questions/1962310/… 【参考方案1】:您可以通过几种方式进行设置...
你可以做到这一点,而无需定义小部件,只需在元素上设置 html 'style' 属性
选项 1
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyFormForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs['style'] = "width:200px"
选项 2
class MyForm(forms.ModelForm):
class Meta:
model = Foo
'widgets' =
'title' = forms.CharField(attrs='size':'80'),
选项 3
class MyForm(forms.ModelForm):
title = models.CharField(max_length=200, widget=forms.CharField(attrs='size':'80')
【讨论】:
感谢您的回答。这现在使用 forms.modelForm 和 forms.CharField,而我使用的是 models.ModelForm 和 models.CharField。我还没有真正理解models.ModelForms和forms.ModelForms之间的区别,我一直不愿意改变,因为它可能会导致更多问题。有没有办法使用models.ModelForm来做到这一点,还是我改成forms.ModelForm更好? 所以表单可以是绑定的也可以是未绑定的。您正在尝试使用绑定表单,因为您正在使用models.CharField
- 在此处阅读更多信息 effectivedjango.com/forms.html 。所以你可以这样想:models.CharField
处理数据组件,而forms.CharField
让你能够处理未绑定的表单,还可以操作小部件、标签、帮助文本等。基本上是表单的呈现方式。
好的,我想我已经掌握了它的基础知识,谢谢。现在我得到了新的错误而不是TypeError: 'DeclarativeFieldsMetaclass' object is not iterable
我还从我的模型、表单和视图文件中添加了示例
第一件事——class ChemRun(forms.Form):
需要继承自models.Model——因为它是一个模型! - 你的字段也一样——你在你的models.py中描述你的模型的行为,所以字段也需要引用这个title = models.CharField(max_length=50)
。对于status = forms.CharField(max_length=20, initial="In queue")
,这变为status = models.CharField(max_length=20)
- 请注意initial
是forms.CharField
参数,而不是models.CharField
参数以上是关于Django - 指定 django.db.models.(???) 字段形式的宽度的主要内容,如果未能解决你的问题,请参考以下文章
Django - 指定 django.db.models.(???) 字段形式的宽度
DJANGO_SETTINGS_MODULE - 未加载指定的设置文件?