Django CharField против TextField

В чем разница между CharField() и TextField() в Django? В документации говорится, что CharField() следует использовать для небольших строк, а TextField() - для больших строк. Хорошо, но где линия, нарисованная между "маленькими" и "большими" ? Что происходит под капотом здесь, что делает этот случай?

Ответ 1

Это различие между РСУБД varchar (или аналогичным) - обычно они указываются с максимальной длиной и могут быть более эффективными с точки зрения производительности или хранения - и text (или аналогичных) типов - обычно это ограниченный только жесткими ограничениями реализации (а не схемой DB).

PostgreSQL 9, в частности, гласит, что "Различия в производительности между этими тремя типами нет" , но AFAIK имеет некоторые отличия, например. MySQL, поэтому это нужно помнить.

Хорошим правилом является то, что вы используете CharField, когда вам нужно ограничить максимальную длину, TextField в противном случае.

Это тоже не специфично для Django.

Ответ 2

В некоторых случаях это связано с тем, как используется поле. В некоторых механизмах БД различия полей определяют, как (и если) вы ищете текст в поле. CharFields обычно используются для вещей, доступных для поиска, например, если вы хотите найти "один" в строке "один плюс два". Поскольку строки короче, они требуют меньше времени для поиска двигателя. TextFields обычно не предназначены для поиска (например, для тела блога), но предназначены для хранения больших фрагментов текста. Теперь большая часть этого зависит от DB Engine и, как и в Postgres, это не имеет значения.

Даже если это не имеет значения, если вы используете ModelForms, вы получаете в форме другой тип поля редактирования. ModelForm будет генерировать HTML-форму размером одной строки текста для CharField и многострочной для TextField.

Ответ 3

Например, 2 поля добавлены в модель, как показано ниже.

description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)

Ниже приведены запросы mysql, выполняемые при переносе.


для TextField (описание) поле определяется как longtext

ALTER TABLE 'sometable_sometable' ADD COLUMN 'description' longtext NULL;

Максимальная длина TextField в MySQL составляет 4 ГБ в соответствии с обзором строкового типа.


для CharField (title) max_length (обязательно) определяется как varchar(64)

ALTER TABLE 'sometable_sometable' ADD COLUMN 'title' varchar(64) NULL;
ALTER TABLE 'sometable_sometable' ALTER COLUMN 'title' DROP DEFAULT;

Ответ 4

CharField CharField составляет 255 символов, а TextField может содержать более 255 символов. Используйте TextField когда у вас есть большая строка в качестве ввода. max_length знать, что когда параметр max_length передается в TextField он передает проверку длины в виджет TextArea.

Ответ 5

я не передавал значение drive_a в переменную drive; Я использую модуль Django PLZ, помогите мне, если кто-нибудь с помощью этого модуля Django..

Мой код

из django формы импорта import os drive_a = [chr (x) + "," для x в диапазоне (65, 90), если os.path.exists(chr (x) + ':')]

класс contactForm (forms.Form): drive = forms.CharField(label = 'Имя диска', widget = forms.Select(choices = drive_a))