2012-04-07 5 views
29

TextFieldCharFieldの間の速度差がPostgreSQLでは無視できるため、PostgreSQLデータベースを使用している場合は、可変長文字列には常にTextFieldを使用してください。私はDjangoには比較的新しいですし、私のデータベースの可変長URLにTextFieldを使用することを検討していました。 URLFieldを使用するメリットがあるのですか? URLにURLFieldではなくTextFieldを使用すると悪い形式とみなされますか?TextFieldよりURLFieldを使用する利点?

答えて

43

URLFieldは実際にCharFieldですですワット(正規表現ベースのバリデータに置き換えられました)をチェックする正規表現ベースのURLパターンとオンラインバリあなたがURL

の長さの制限を気にしないならば、あなたはTextFieldを使用することができますのサポート/
from django.core.validators import URLValidator 

# in model 
field = models.TextField(validators=[URLValidator()]) 

さらに、CharFieldまたはTextFieldを使用するかどうかは、フィールドに最大長の拘束が必要かどうか、および編集に適している要素タイプ(textareaまたはinput)によって異なります。 PostgreSQL側では、大きな違いはありません。

+8

を、[IEは約2,000文字より長いURLをロードすることはできません](https://stackoverflow.com/questions/417142/what-is-the- url-in-different-browsersの最大長)、 'URLField'で' max_length'を2000に設定して、それを1日と呼びます。 – mlissner

+0

URLFieldの非推奨への参照はありますか? – pravin

+0

@pravin URLFieldではありませんが、以前のバリデータは推奨されていません。バリデーターはURLを検証するためにオンラインでアクセスしていましたが、現在は正規表現バリデーターに置き換えられてURLフォーマットの検証を確認しています。 – okm

2

https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield もちろん、CharField/TextFieldを使用することはできますが、ユーザーの入力を処理することができます。また、ユーザーが入力したものは何でもあなたのことを忘れないでください。ソースコードから

:CharFieldですと同じように

#、これはあなたがURLField source codeが表示された場合、あなたはそれがURLのバリデータと実際にCharFieldですだ見つけるURLの検証が

を実行することになります。

また、EmailField、ImageField、* Fieldなどの他のフィールドも使用できます。

2

このクラスを試してみてください:レコードの

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) 
+1

はmax_lengthを2000に設定し、あなたは完璧なフィールドを持っています:) – gabn88

関連する問題