我正在使用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中,所以想根据我的选择命名它们。如何处理以及我的代码中出现上述错误的问题是什么?
答案 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)
...