4

Can I have in Django's model a column of PostgreSQL's "text" type? If so, how can I do that?

4

2 回答 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 回答