Поле файла модели django с ошибкой в ​​БД

Я использую django 1.4 и использую файловое поле модели django для загрузки некоторого документа через модель. У меня следующие проблемы:

Когда я отправляю форму, она говорит:

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 ответ

Решение

Как долго это file_name вы пытаетесь хранить?

По умолчанию экземпляры FileField создаются как столбцы varchar(100) в вашей базе данных. Как и в других полях, вы можете изменить максимальную длину, используя аргумент max_length. Это может привести к ошибке усечения данных.

Также вы можете переименовать ваш файл как хотите. upload_to может быть вызываемым, который принимает экземпляр и имя загруженного файла в качестве входных данных, а затем вы можете указать точное имя и путь, который вы хотите сохранить.

Например.

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

...
    file_name=models.FileField(upload_to=get_file_name)
...
Другие вопросы по тегам