Can I have in Django's model a column of PostgreSQL's "text" type? If so, how can I do that?
问问题
4310 次
2 回答
6
您可以使用TextField
一个大的文本字段。此字段的默认表单小部件是 Textarea。
用法:
class MyModel(models.Model):
text_field = models.TextField("My field label", null=True, blank=True)
如果文字不太长,你也可以考虑CharField
一个字符串字段,用于小到大的字符串。对于大量文本,请使用 TextField。
此字段的默认表单小部件是 TextInput。
用法:
class MyModel(models.Model):
text_field = models.CharField("My field label", max_length=1024, null=True, blank=True)
于 2013-09-21T15:09:48.217 回答
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
)
它们都是数据库中的“文本”,但在管理和表单小部件中像往常一样表示。
于 2013-11-21T08:56:14.957 回答