2012-04-07 71 views
29

據我所知,當您使用PostgreSQL數據庫時,因爲TextFieldCharField之間的速度差異對於PostgreSQL而言可以忽略不計,所以您應該始終使用TextField作爲可變長度字符串。我相對新的Django,並考慮使用我的數據庫中的可變長度URL的TextField。我想知道使用URLField是否有優勢?使用TextField而不是URLField作爲網址會被認爲是不好的形式嗎?通過TextField使用URLField的優點?

回答

43

URLField實際上是CharField基於W /正則表達式的URL模式檢查和在線驗證(這是由一個基於正則表達式替換驗證),你可以使用文本字段,如果你不在乎URL

的長度,限制支持
from django.core.validators import URLValidator 

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

此外,使用CharField或TextField取決於您是否希望字段上的最大長度約束以及哪種元素類型更適合編輯:textarea或input。在PostgreSQL方面,沒有顯着差異。

+8

對於記錄,[IE不能加載大於約2000個字符長的URL(https://stackoverflow.com/questions/417142/what-is-the-不同瀏覽器中的最大長度),所以你可以在'URLField'上將'max_length'設置爲2000,並將其稱爲一天。 – mlissner 2015-05-26 17:55:43

+0

任何對URLField的棄用的引用? – pravin 2018-02-07 19:20:05

+0

@pravin它不是URLField,但它的先前驗證器已被棄用。驗證器在線訪問URL以驗證,現在它被替換爲正則表達式驗證器來檢查URL格式的驗證。 – okm 2018-02-09 04:49:47

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 2017-02-06 19:41:22