【问题标题】:django model filefield having db errordjango 模型文件字段有 db 错误
【发布时间】:2012-09-27 21:00:27
【问题描述】:

我正在使用 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 中,所以想根据我的选择命名它们。怎么做?我的代码中有什么问题导致上述错误?

【问题讨论】:

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


    【解决方案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)
    ...
    

    【讨论】:

    • 在我的数据库中它是 varchar(50) ,而且我刚刚看到它正在插入我的文件的完整路径而不仅仅是名称,这似乎不是正确的行为,是吗?同样根据app_id上传文件,我需要先单独插入记录吗?获取它的自动递增 id 或 django 有什么适合它的?
    • 您使用的是什么数据库,请尝试指定 max_length=200 并重新创建表或迁移(如果使用南)。文件路径通常相对于settings.py中指定的“MEDIA_PATH”
    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2022-10-24
    • 2011-03-12
    • 2020-05-05
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多