Qual è la differenza tra CharField()
e TextField()
in Django? Il documentation dice che CharField()
dovrebbe essere usato per stringhe più piccole e TextField()
dovrebbe essere usato per stringhe più grandi. Ok, ma dov'è la linea tracciata tra "piccolo" e "grande"? Cosa sta succedendo sotto la cappa qui che rende questo il caso?Django CharField vs TextField
risposta
È una differenza tra il numero varchar
di RDBMS (o simile) - quelli di solito sono specificati con una lunghezza massima e potrebbero essere più efficienti in termini di prestazioni o memorizzazione - e tipi text
(o simili). limiti di implementazione hardcoded (non uno schema DB).
PostgreSQL 9, in particolare, afferma che "There is no performance difference among these three types", ma AFAIK ci sono alcune differenze in es. MySQL, quindi questo è qualcosa da tenere a mente.
Una buona regola empirica è che si utilizza CharField
quando è necessario limitare la lunghezza massima, TextField
in caso contrario.
Questo non è proprio specifico per Django.
In alcuni casi è legato a come viene utilizzato il campo. In alcuni motori DB le differenze di campo determinano come (e se) si cerca il testo nel campo. I CharField vengono generalmente utilizzati per oggetti ricercabili, ad esempio se si desidera cercare "uno" nella stringa "uno più due". Poiché le stringhe sono più corte, il motore richiede meno tempo per la ricerca. I campi di testo in genere non devono essere cercati attraverso (come forse il corpo di un blog) ma sono pensati per contenere grossi pezzi di testo. Ora la maggior parte di questo dipende dal DB Engine e come in Postgres non importa.
Anche se non importa, se si utilizza ModelForms si ottiene un diverso tipo di campo di modifica nel modulo. ModelForm genererà un modulo HTML della dimensione di una riga di testo per un CharField e multilinea per un campo di testo.
Ad es.,. 2 campi vengono aggiunti in un modello come seguente ..
description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)
Qui di seguito sono le query mysql eseguite quando vengono applicate le migrazioni.
per TextField
(descrizione) il campo è definito come un longtext
ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;
per CharField
(titolo) della max_length (obbligatorio) è definito come varchar(64)
ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;
CharField trovi max_length di 255 caratteri mentre TextField può contenere più di 255 caratteri. Usa TextField quando hai una stringa grande come input. È bene sapere che quando il parametro max_length viene passato in un TextField, passa la validazione della lunghezza al widget TextArea.
- 1. Django - Admin: list_display TextField
- 2. Case non classificate Charfield in modelli Django
- 3. Django: CharField con lunghezza fissa, come?
- 4. django model CharField: max_length non funziona?
- 5. Django ORM, CharField e vuoto = True
- 6. CharField max_length 2^n vs 2^n-1
- 7. aumento Charfield
- 8. Aggiungere funzionalità rich text format Django TextField
- 9. Django TextField validazione max_length per ModelForm
- 10. Vantaggi dell'utilizzo di URLField su TextField?
- 11. Come aggiungo un segnaposto su un CharField in Django?
- 12. Come aggiungere una 'stella *' dopo un django ModelForm CharField?
- 13. Django Help: AttributeError: l'oggetto 'module' non ha attributo 'Charfield'
- 14. TextField manca in django.forms
- 15. Django Admin: aggiungi TinyMCE solo a TextField specifico?
- 16. Django-nonrel vs Django-mongodb vs Mongokit vs pymongo nativo
- 17. Django: come impostare la lunghezza minima per models.TextField()?
- 18. JavaFX TextField CSS
- 19. TextField Custom for Validate
- 20. Textfield shouldchangecharactersinrange swift
- 21. Get int da textField
- 22. JavaFX ricerca textfield
- 23. JavaFX TextField EventHandler
- 24. Django vs PHP + quadro
- 25. Django Modello() vs Model.objects.create()
- 26. Filtro Django vs escludi
- 27. Django: timezone.now vs timezone.now()
- 28. grok vs confronto django
- 29. django-shop vs Satchless?
- 30. Django Dajax vs Dajaxice
E viceversa, se si utilizza CharField, è necessario * avere * una lunghezza massima –
. Ho scoperto che l'utilizzo di 'TextField' per impostazione predefinita può influire sulla portabilità della tua app. Non ci può essere un impatto sulle prestazioni su Postgres, ma Oracle lo memorizzerà come un 'CLOB' che ha alcuni fastidi, come non essere in grado di utilizzare il campo nelle istruzioni WHERE. Solo qualcosa da considerare. – Rob
Si dovrebbe anche considerare che in Oracle 'CharField' non può avere' max_length' maggiore di 2000, o emette un 'ORA-00910: lunghezza specificata troppo lunga per il suo errore di tipo dati '. – Dinei