1

我有一个简单的模型,我想使用 ModelForm 保存它。

这是代码:

#models.py
class MyArchive(models.Model):
    archive_id = models.CharField(max_length = 20, primary_key=True)
    description = models.CharField(max_length = 50, blank = True)
    archive_file = models.FileField(upload_to = "my_archives/")

#views.py
class MyArchiveForm(ModelForm):
    class Meta:
        model = MyArchive
def upload(request):
    if request.method == 'POST':
        form = MyArchiveForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponse('uploaded success!')
        else:
            logger.debug("invalid form")
    return HttpResponse('upload fail!')

我已经同步了数据库并看到了创建的表。但每次它去 form.save 然后说

DatabaseError, no such table. 

我使用 ModelForm 保存的方法是否错误?

更新:甚至奇怪的是,当我删除这一行时:form.save(),它失败并if form.is_valid()出现相同的错误no such table,但是当我在调试模式下运行 django 时,if form.is_valid()工作正常。

4

1 回答 1

0

这是一个小技巧,原来是由于数据库配置错误导致的,我在settings.py中使用了相对路径,所以它在运行时没有找到db文件,但是在运行时django sycdb,它可以找到db loc的位置。

'default' : {
    'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'sqlite.db',                      # Or path to database file if using sqlite3.
}

更新:要在 db 文件上使用相对路径,我应该有这样的 db 设置:

from os.path import dirname, join

PROJECT_DIR = dirname(__file__)

DATABASES = {
    # ...
    'NAME': join(PROJECT_DIR, 'sqlite.db'),
    # ...
}

请参阅我可以使 Django 数据库路径(对于 sqlite3)“跨平台”吗?

于 2013-04-15T15:05:18.063 回答