class MyForm(forms.ModelForm):
extra_field = forms.CharField()
class Meta:
model = MyModel
widgets = {
#Does not work
'extra_field': forms.Textarea(attrs={'placeholder': u'Bla bla'}),
}
但似乎忽略了extra_field
at的小部件定义class Meta
,因为我在模板上没有 输入 标签,而是使用了 textarea
。所以我采用下一种方法:
class MyForm(forms.ModelForm):
#It works fine
extra_field = forms.CharField(widget=forms.Textarea())
class Meta:
model = MyModel
它非常适合我,但是我曾经在class Meta
声明时为表单字段指定小部件。所以我想知道:
为什么我的第一种方法不起作用?我做错了什么?
多余的字段无关紧要。这有效:
class FooForm(forms.ModelForm):
class Meta:
model = People
widgets = {
'name': forms.Textarea(attrs={'placeholder': u'Bla bla'}),
}
这不是:
class FooForm(forms.ModelForm):
name = forms.CharField()
class Meta:
model = People
widgets = {
'name': forms.Textarea(attrs={'placeholder': u'Bla bla'}),
}
确实没有记录,这是我在与该行为有关的文档中可以找到的最好的(也许不是,这只是我可以找到的最好的):
如果你明确实例这样的表单字段,Django的假定你想完全定义其行为 […] 您必须声明表单字段时明确设置相关参数 。
此行为的实现在django / forms / models.py第219行中:
204 if opts.model:
205 # If a model is defined, extract form fields from it.
206 fields = fields_for_model(opts.model, opts.fields,
207 opts.exclude, opts.widgets, formfield_callback)
208 # make sure opts.fields doesn't specify an invalid field
209 none_model_fields = [k for k, v in fields.iteritems() if not v]
210 missing_fields = set(none_model_fields) - \
EE 211 set(declared_fields.keys())
212 if missing_fields:
213 message = 'Unknown field(s) (%s) specified for %s'
214 message = message % (', '.join(missing_fields),
215 opts.model.__name__)
216 raise FieldError(message)
217 # Override default model fields with any custom declared ones
218 # (plus, include all the other declared fields).
219 fields.update(declared_fields)
线路206后,田[“名”。小工具 是 确实的textarea Meta.widgets规定。
在第219行,使用声明的字段更新字段,并且fields
[‘name’]。widget变为django.forms.widgets.TextInput,这是CharField的默认值。
显然,显式字段定义具有优先权。
感谢您提出问题,很高兴知道,很好的问题。
给定以下模型: 以及以下模型窗体,其中包含一些用于儿童模型的额外字段: 我有一个有很多孩子的父母模型。我需要使用一些数学来平衡孩子们的体重(每个孩子的最小和最大体重都有一些限制)。因此,我试图创建一个表单集,允许用户输入每个孩子的最小和最大体重,以提交重新平衡。我想在上述表格中指定一个默认的最小重量和一个默认的最大重量。因此,我的观点如下: 然而,当我输出表单时,我为min_weight和max_
问题内容: 我有一个自定义TagField表单字段。 如上所示,它使用TextInput表单字段小部件。但是在管理员中,我希望使用Textarea小部件来显示它。为此,存在钩子,但在这种情况下不起作用。 管理员声明为: 这对表单字段窗口小部件没有影响,并且仍使用TextInput小部件呈现。 问题答案: django管理员对其许多字段使用自定义窗口小部件。覆盖字段的方法是创建一个供ModelAdm
问题内容: 我有这两个课(表) 还有这个: 运行此代码后,在数据库(student_course)中创建了一个额外的表,现在我想知道如何在该表中添加额外的字段,例如(Grade,Date和…(我的意思是student_course表)),我看到了一些解决方案,但我不喜欢它们,而且我对它们有一些问题: 第一个样品 问题答案: 如果在链接表(STUDENT_COURSE)上添加额外的字段,则必须根据s
问题内容: 我正在遍历表单的字段,对于某些字段,我希望布局略有不同,需要更改HTML。 为了准确地做到这一点,我只需要知道小部件类型。它的类名或类似名称。在标准python中,这很容易! 不幸的是,你不允许访问模板中的下划线变量。大! 你可以进行测试,但这仅适用于文本/密码类型。我需要更多的分辨率。 对我而言,无论看起来多么困难,在模板级别执行此操作都是最有意义的。我已经将处理字段的HTML的部分
我希望有人能帮我创建我需要的查询。我引用这个留档的元素或额外的小部件,“额外的帖子”:https://developers.elementor.com/custom-query-filter/ 现在,我可以在编辑器中设置查询以显示来自多个类别的帖子。问题是,查询显示来自“红色”或“蓝色”的帖子。我需要查询来显示标记为“红色”和“蓝色”的帖子。 我使用自定义帖子类型和自定义类别,这似乎是有意义的例子
问题内容: 我的模型中有一个DateTimeField字段。我想将其显示为Django管理站点中的复选框小部件。为此,我创建了一个自定义表单小部件。但是,我不知道如何仅将我的自定义窗口小部件用于这一字段。 在Django文档解释了如何使用自定义窗口小部件的所有特定类型的字段: 但是,这还不够精细。我只想更改一个字段。 问题答案: 为你的ModelAdmin创建一个自定义ModelForm并将“ w