有没有什么好的文章可以解释django中的自定义表单字段,而不是自定义模型字段?我找不到任何通过谷歌。关于如何在django中编写自定义表单字段的教程?
回答
表单域易于定制:
class UpperCaseField(forms.CharField):
def clean(self, value)
try:
return value.upper()
except:
raise ValidationError
基本上你刚刚创建一个从外地继承一个类,最像你想要什么,然后重写洁()方法,它返回你的价值想。下面是另一个例子:
class MyObjectField(forms.ModelChoiceField):
# in this case, 'value' is a string representing
# the primary key of a MyObject
def clean(self, value):
try:
return MyObject.objects.get(pk=value)
except:
raise ValidationError
定制,另一方面部件,多一点有用的,但多一点很难做到,因为有需要写入,使他们的工作多了一些方法顺利。
这不是一个教程,但Django的这个有点文档会谈:
如果内置领域类不 满足您的需求,您可以轻松地创建 自定义字段类。为此,只需 创建一个 django.forms.Field的子类。其唯一的 要求是它实现了一个 clean()方法,并且它的
__init__()
方法接受上面提到的核心参数 (必需的,标号, initial,widget,help_text)。
您可以阅读有关清洁方法,并参阅示例at the django docs。再次,不是教程,但有用。
我发现我通过阅读一些可用的django应用程序项目(如django-extensions)中的代码来学习很多东西,它们重写表单域并且是很好的学习工具(至少对我而言)。这可以帮助你开始。
与开源代码一样,通过阅读源代码本身,您将学到很多东西。请参阅django.forms.fields
模块,了解如何定义所有不同的表单字段 - 其中大部分都是其他子表单字段的子类,因此您可以复制该表单并更改所需内容。
链接到最新的来源:https://github.com/django/django/blob/master/django/forms/fields.py – 2012-12-18 00:42:49
- 1. 关于编写自定义Django小部件的教程?
- 2. 编写自定义Django表单字段和小部件
- 3. Django fieldset.html自定义。如何自定义单个字段?
- 4. 在自定义Django表单字段中的to_python的对面?
- 5. 关于如何自定义Android用户界面的教程
- 6. django admin:如何在字段集中自定义一个字段?
- 7. 关于如何为PostgreSQL编写存储过程的Ruby教程?
- 8. Django:自定义特定的表单字段的HTML
- 9. 在Django自定义模型字段的管理表单集成
- 10. Django:根据字段属性自定义模板中的表单
- 11. 关于如何在Xcode 4.2中自定义UIButtons的Interface Builder教程
- 12. 自定义表单如何在django中向窗口小部件输出字段
- 13. 自定义排序在Django的自定义字段中
- 14. 添加简单的自定义字段到Django - 如何写南内省规则
- 15. 教程如何在WPF中显示自定义类的列表
- 16. Django教程自定义管理模板
- 17. 从表单自定义外键字段保存数据在Django
- 18. 如何编写自定义模板字段的DataControlField
- 19. 访问Django中的自定义表单字段类型的表单属性
- 20. Django的:定义自己的表单字段
- 21. Django模型中的自定义字段
- 22. 教条2与自定义字段名称的manytoone关系
- 23. 如何编写基于套接字的自定义传输WCF
- 24. 如何使用drupal7中的自定义表单更新字段
- 25. 在w index中编入自定义Django模型字段
- 26. 有关开发自定义Eclipse编辑器的教程
- 27. 如何在django admin字段中添加自定义html?
- 28. Rails:如何使用嵌套字段自定义表单中字段的顺序
- 29. Django表单自定义
- 30. 自定义django表单域
谢谢。我想我需要编写一个自定义小部件,因为我需要自定义该字段的呈现。 – 2009-10-09 06:57:23
注意:clean()负责运行to_python(),validate()和run_validators()。如果你重写clean()并且不执行这些,你会搞砸了。 – orokusaki 2010-01-22 02:06:47
orokusaki是正确的,如果你重写了clean(),你至少应该把它称为super(UpperCaseField,self).clean(value) – 2013-05-14 14:35:30