如何在Django中使用PostgreSQL的“文本”列类型?

时间:2013-09-21 15:06:35

标签: django django-models

我可以在Django模型中有一列PostgreSQL“text”类型吗?如果是这样,我该怎么做?

2 个答案:

答案 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
)

它们都是数据库中的“文本”,但在管理员和表单小部件中通常表示。