django模型文件字段有db错误

时间:2012-10-07 09:40:12

标签: django django-models django-forms django-file-upload

我正在使用django 1.4并使用django模型的文件字段来通过modelform上传一些文档。我有以下问题:

当我提交表格时,它说:

Data truncated for column 'file_name' at row 1

以下是我的模型:

class App(models.Model):
    user_name=models.CharField(max_length=50)
    email=models.CharField(max_length=50)
    status=models.CharField(max_length=10,choices=APPLICATIONSTATUSCHOICE)
    archived=models.BooleanField()
    mark_spam=models.BooleanField()
    date=models.DateField()
    file_name=models.FileField(upload_to=PATH+"/")
    def getPath(self):
        return PATH
    def __unicode__(self):
        return self.user_name
    def send_email(self):
        pass

以下是模型表单的代码:

class AppForm(ModelForm):
    class Meta:
     model=App
         exclude=('status','archived','mark_spam')

email=forms.EmailField()

    def save(self,commit=True):
         app=super(AppForm,self).save(commit=False)
     app.status='sent'
         app.save()

它也是以原始名称存储文件,我是否可以使用其他名称,因为我来自PHP背景和PHP我通常将其保存为<mysql auto id>.<filextension>,所以我怎样才能在django中执行此操作。我的第一印象是所有这些都将通过django自动完成,而它只是用自己选择的名称保存它,但我需要将名称保存到db中,所以想根据我的选择命名它们。如何处理以及我的代码中出现上述错误的问题是什么?

1 个答案:

答案 0 :(得分:1)

您要存储file_name多长时间?

默认情况下,FileField个实例在数据库中创建为varchar(100)列。与其他字段一样,您可以使用max_length参数更改最大长度。这可能导致数据截断错误。

您也可以根据需要重命名文件。 upload_to可以是callable,它将实例和上传文件的名称作为输入,然后您可以指定要存储的确切名称和路径。

例如

def get_file_name(instance, filename):
    return '/'.join(['blah', instance.user.username, filename])

...
    file_name=models.FileField(upload_to=get_file_name)
...