我需要增加我的蛞蝓大小为500默认情况下是255个字符,同时,我需要保持它的独特性以及。有没有办法让它发生?
models.py:
class Product(models.Model):
title = models.CharField(max_length=500)
description = models.TextField(blank=True, null=True)
price = models.DecimalField(max_digits=20, decimal_places=2)
sku = models.CharField(null=True, max_length=100)
url = models.URLField(blank=True)
slug = models.SlugField(unique=True)
请指示。
3条答案
按热度按时间kadbb4591#
根据文档,
SlugField
的最大长度为255个字符。但是它是数据库后端执行的,因此,根据您使用的后端,您可能能够增加它。SQLite和PostgreSQL都允许将
max_length
设置为500,并带有UNIQUE
约束。请注意,PostgreSQL实际上会强制执行长度限制,而SQLite并不真正关心,并允许您插入大于声明大小的字符串。但是MySQL/Mariadb驱动程序将在
django/db/backends/mysql/validation.py
中强制执行255个字符的限制。在标准后端中,这是唯一具有此限制的后端。255来自InnoDB列的最大索引键为767字节的限制。如果必须在列中存储UTF8数据,则每个字符最多占用3个字节,这将导致767/3 = 255个字符。一个可能的解决方案是增加一个
CharField
,其中包含slug的散列。该字段将很短(例如32字节的MD5摘要)* 和 * 它将是唯一的,这将阻止重复的slug被插入。填充slug及其哈希可以在Product.save()
中完成。模型将是:
现在,如果尝试保存具有相同slug的记录,则会引发
slug_hash
上的IntegrityError
。6ljaweal2#
是的,这是可能的使用信号。在保存模型示例之前,将自动创建/更新辅助信息字段。如果已经存在具有相同slug的模型示例,则可以将标题与id连接起来,以使其唯一。请参见下面的代码(将其添加到您的模型中):
要增加slug最大字符数,请将字段替换为:
不要超过255,以免在更改数据库技术时遇到麻烦。
h7wcgrx33#
使用PostgreSQL和SQLite,我可以将
max_length=500
和unique=True
设置为SlugField(),如下图所示,然后我可以根据我的实验在Django Admin中保存500
字符: