Python django中的syncdb出现问题
我在django应用程序上不断出现此错误的原因是什么?我在webfaction上使用mysql,这是标准的,我已经将其设置为UTF8-我真的不能对此置之不理 “未能安装源的索引。类型模型:指定的键太长;最大键长度为767字节” 这是我的模型Python django中的syncdb出现问题,python,mysql,django,Python,Mysql,Django,我在django应用程序上不断出现此错误的原因是什么?我在webfaction上使用mysql,这是标准的,我已经将其设置为UTF8-我真的不能对此置之不理 “未能安装源的索引。类型模型:指定的键太长;最大键长度为767字节” 这是我的模型 from django.db import models import uuid import os class Messages(models.Model): name = models.CharField(max_length=255)
from django.db import models
import uuid
import os
class Messages(models.Model):
name = models.CharField(max_length=255)
message = models.CharField(max_length=255)
show = models.DateTimeField(auto_now_add=True)
hide = models.DateTimeField()
def __unicode__(self):
return self.name
class Genre(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=300)
meta = models.TextField(max_length=300)
description = models.TextField(max_length=300)
created = models.DateTimeField(auto_now_add=True)
listing = models.BooleanField(default=True)
def __unicode__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=300)
meta = models.TextField(max_length=300)
description = models.TextField(max_length=300)
created = models.DateTimeField(auto_now_add=True)
listing = models.BooleanField(default=True)
def __unicode__(self):
return self.name
class Images(models.Model):
name = models.CharField(max_length=50)
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join( 'images' , filename)
image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
def __unicode__(self):
return self.name
class Gallery(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=300)
meta = models.TextField(max_length=300)
description = models.TextField(max_length=300)
images = models.ManyToManyField(Images)
def __unicode__(self):
return self.name
class Article(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=300)
category = models.ManyToManyField(Category)
link = models.URLField(max_length=255)
meta = models.URLField(max_length=255)
description = models.TextField(max_length=300)
content = tinymce_models.HTMLField()
source_name = models.CharField(max_length=50)
source_link=models.URLField()
created = models.DateTimeField(auto_now_add=True)
listing = models.BooleanField(default=True)
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join( 'images' , filename)
image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
def __unicode__(self):
return self.name
我认为这是MySQL中
VARCHAR
字段长度的问题
您使用的是SlugField
,在后台也使用了VARCHAR
,与CharField
相同。相同的长度限制适用于两个字段,因此在slug字段中设置max_length=300
是一个问题(300*3字节是900字节,正如错误所示,超过了767的最大值。如果您想知道767从何而来,则是765字节+)
将
SlugField
字段的max\u length
属性减少到255,就可以开始了。255个字符乘以3个字节/char=765个字节不是吗?哈,你完全正确,我不知道我是怎么做到的:p-编辑:实际上我读了一些mysql varchar类型和"... VARCHAR值存储为1字节或2字节长度前缀加上数据。“因此765+2字节作为前缀。