开发者

Tutorial about how to write custom form fields in django?

开发者 https://www.devze.com 2022-12-08 08:34 出处:网络
Is there 开发者_JS百科any good articles that explain custom form fields in django, not custom model fields? I couldn\'t find any through google.Form fields are easy to customize:

Is there 开发者_JS百科any good articles that explain custom form fields in django, not custom model fields? I couldn't find any through google.


Form fields are easy to customize:

class UpperCaseField(forms.CharField):
    def clean(self, value)
        try:
            return value.upper()
        except:
            raise ValidationError

basically you just create a class that inherits from the field that most resembles what you want, then rewrite the clean() method so that it returns the value you want. Here is another example:

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

custom widgets on the other hand, are a little more useful, but a little more hard to do because there are a few more methods that need to be written so that they work smoothly.


As always with open-source code, you'll learn a great deal by reading the source itself. See the django.forms.fields module to see how all the different form fields are defined - most of them are subclasses of others already, so you can just replicate that and change what you need.


It's not a tutorial, but django's docs talks about this a little:

If the built-in Field classes don't meet your needs, you can easily create custom Field classes. To do this, just create a subclass of django.forms.Field. Its only requirements are that it implement a clean() method and that its __init__() method accept the core arguments mentioned above (required, label, initial, widget, help_text).

You can read about the clean method and see an example at the django docs. Again, not a tutorial, but useful.

I find I am learning a lot by reading the code in some of the the django app projects that are available, such as django-extensions, which override the form fields and are good learning tools (for me, at least). This can help get you started.

0

精彩评论

暂无评论...
验证码 换一张
取 消