Advantages to using URLField over TextField?

后端 未结 3 641
后悔当初
后悔当初 2021-02-03 18:07

As I understand it you should always use a TextField for a variable length string when your using a PostgreSQL database because the speed difference between a

相关标签:
3条回答
  • 2021-02-03 18:17

    https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield Of course you can use CharField/TextField but handling user input and be sure whatever user enters is up-to you.

    From the source code:

    # As with CharField, this will cause URL validation to be performed

    If you see the URLField source code you will find it's actually a CharField with URL validator.

    Also there is other ready to use fields such as EmailField, ImageField, *Field!

    0 讨论(0)
  • 2021-02-03 18:35

    Try this class:

    class LongURLField(TextField):
        description = 'Long URL'
    
        def __init__(self, verbose_name=None, name=None, **kwargs):
            TextField.__init__(self, verbose_name, name, **kwargs)
            self.validators.append(validators.URLValidator())
    
        def formfield(self, **kwargs):
            # As with TextField, this will cause URL validation to be performed
            # twice.
            defaults = {
                'form_class': forms.URLField,
            }
            defaults.update(kwargs)
            return super(LongURLField, self).formfield(**defaults)
    
    0 讨论(0)
  • 2021-02-03 18:37

    URLField is actually CharField w/ supporting of Regexp-based URL pattern checking and a online validator(which was replaced by a RegEx based validator), you could use TextField if you don't care length-limitation of URL

    from django.core.validators import URLValidator
    
    # in model
    field = models.TextField(validators=[URLValidator()])
    

    Furthermore, using of CharField or TextField depends on whether you want max-length constraint on the field, and which element type is more suitable for editing: textarea or input. On PostgreSQL side, there is no significant difference.

    0 讨论(0)
提交回复
热议问题