TextField
とTextField
の速度の違いはPostgreSQLでは無視できるため、PostgreSQLデータベースを使用する場合は、可変長文字列に常にCharField
を使用する必要があります。 。私はDjangoが比較的新しく、私のデータベースで可変長URLにTextField
を使用することを検討していました。 URLField
を使用する利点があるかどうか疑問に思っていましたか? URLにTextField
ではなくURLField
を使用するのは不適切な形式と見なされますか?
URLFieldは実際にはCharField w/RegexpベースのURLパターンチェックとオンラインバリデーター(RegExベースのバリデーターに置き換えられました)のサポートです。URLの長さ制限を気にしない場合はTextFieldを使用できます
from Django.core.validators import URLValidator
# in model
field = models.TextField(validators=[URLValidator()])
さらに、CharFieldまたはTextFieldの使用は、フィールドの最大長の制約が必要かどうか、および編集に適したエレメントタイプ(textareaまたはinput)によって異なります。 PostgreSQL側では、大きな違いはありません。
https://docs.djangoproject.com/en/dev/ref/models/fields/#urlfield もちろん、CharField/TextFieldを使用できますが、ユーザー入力を処理し、入力したユーザーが確実に起動するようにします-あなたへ。
ソースコードから:
#CharFieldと同様に、これによりURL検証が実行されます
RLFieldソースコード が表示される場合、実際にはURLバリデーターを備えたCharFieldであることがわかります。
また、EmailField、ImageField、* Field!など、すぐに使用できるフィールドもあります!
このクラスを試してください:
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)