Was ist der Unterschied zwischen CharField()
und TextField()
in Django? Die Dokumentation besagt, dass CharField()
dies für kleinere Zeichenfolgen und TextField()
für größere Zeichenfolgen verwendet werden sollte. Okay, aber wo ist die Grenze zwischen "klein" und "groß" gezogen? Was ist hier unter der Haube los, was dies der Fall macht?
302
TextField
standardmäßige Verwendung die Portabilität Ihrer App beeinträchtigen kann. Es gibt möglicherweise keinen Leistungseinbruch bei Postgres, aber Oracle speichert ihn als einen,CLOB
der einige Probleme mit sich bringt, z. B. dass das Feld in WHERE-Anweisungen nicht verwendet werden kann. Nur etwas zu beachten.CharField
nichtmax_length
mehr als 2000 vorhanden sein kann oder einORA-00910: specified length too long for its datatype
Fehler auftritt.In einigen Fällen hängt es davon ab, wie das Feld verwendet wird. In einigen DB-Engines bestimmen die Feldunterschiede, wie (und ob) Sie nach Text im Feld suchen. CharFields werden normalerweise für durchsuchbare Objekte verwendet, z. B. wenn Sie in der Zeichenfolge "eins plus zwei" nach "eins" suchen möchten. Da die Zeichenfolgen kürzer sind, ist das Durchsuchen für die Engine weniger zeitaufwändig. TextFields sind normalerweise nicht zum Durchsuchen gedacht (wie vielleicht der Körper eines Blogs), sondern sollen große Textblöcke enthalten. Jetzt hängt das meiste davon von der DB Engine ab und wie bei Postgres spielt es keine Rolle.
Auch wenn es keine Rolle spielt, erhalten Sie bei Verwendung von ModelForms eine andere Art von Bearbeitungsfeld im Formular. Die ModelForm generiert ein HTML-Formular in der Größe einer Textzeile für ein CharField und eine mehrzeilige für ein TextField.
quelle
Zum Beispiel. In einem Modell wie unten werden 2 Felder hinzugefügt.
Unten finden Sie die MySQL-Abfragen, die ausgeführt werden, wenn Migrationen angewendet werden.
für
TextField
(Beschreibung) ist das Feld definiert alslongtext
Die maximale Länge von
TextField
MySQL beträgt laut GB -Typ-Übersicht 4 GB .für
CharField
(title) ist die max_length (erforderlich) definiert alsvarchar(64)
quelle
Avoid using null on string-based fields such as CharField and TextField
: docs.djangoproject.com/en/2.0/ref/models/fields/#null so ist es am besten zu haltennull=False
.CharField
hat max_length von255
Zeichen,TextField
kann aber mehr als255
Zeichen enthalten. VerwendenTextField
Sie diese Option, wenn Sie eine große Zeichenfolge als Eingabe haben. Es ist gut zu wissen, dass dermax_length
Parameter , wennTextField
er an a übergeben wird, die Längenüberprüfung an dasTextArea
Widget übergibt .quelle
VARCHAR
max_length
Ich hatte ein seltsames Problem und verstand einen unangenehmen seltsamen Unterschied: Wenn ich eine URL vom Benutzer als CharField erhalte und sie dann in HTML als Tag von href verwende, fügt sie diese URL meiner URL hinzu , und das ist nicht das, was ich will. Aber wenn ich es per Textfeld mache, übergibt es nur die URL, die der Benutzer eingegeben hat. Schauen Sie sich diese an: meine Website-Adresse:
http://myweb.com
CharField entery:
http://some-address.com
wenn Sie darauf klicken:
http://myweb.comhttp://some-address.com
TextField entery:
http://some-address.com
wenn Sie darauf klicken:
http://some-address.com
Ich muss erwähnen, dass die URL in der Datenbank auf zwei Arten genau gleich gespeichert wird, aber ich weiß nicht, warum das Ergebnis beim Klicken unterschiedlich ist
quelle