我可以在Django模型中有一列PostgreSQL“text”类型吗?如果是这样,我该怎么做?
答案 0 :(得分:4)
您可以使用TextField
一个大文字字段。此字段的默认表单窗口小部件是Textarea。
用法:
class MyModel(models.Model):
text_field = models.TextField("My field label", null=True, blank=True)
如果文字不太长,您还可以考虑CharFeld
字符串字段,适用于小到大字符串。 对于大量文本,请使用TextField。
此字段的默认表单窗口小部件是TextInput。
用法:
class MyModel(models.Model):
text_field = models.CharField("My field label", max_length=1024, null=True, blank=True)
答案 1 :(得分:1)
自定义CharField将提供“文本”数据库类型的好处,同时保持与其他站点代码兼容。
class CharField(models.CharField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('max_length', 65000)
super(CharField, self).__init__(*args, **kwargs)
def db_type(self, connection):
return 'text'
def south_field_triple(self):
"""Only necessary if using South migrations, which you should."""
from south.modelsinspector import introspector
field_class = self.__class__.__module__ + "." + self.__class__.__name__
args, kwargs = introspector(self)
return (field_class, args, kwargs)
使用此字段而不是models.CharField()可以跳过那个讨厌的max_length和varchar更新。
class Sausage(models.Model):
length = models.PositiveIntegerField()
title = CharField()
recipe = models.TextField()
以下是SQL:
CREATE TABLE "w00t_sausage" (
"id" integer NOT NULL PRIMARY KEY,
"length" integer unsigned NOT NULL,
"title" text NOT NULL,
"recipe" text NOT NULL
)
它们都是数据库中的“文本”,但在管理员和表单小部件中通常表示。