我有一个简单的模型,我想使用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()
工作正常
答案 0 :(得分: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文件上使用相对路径,我应该有这样的数据库设置:
from os.path import dirname, join
PROJECT_DIR = dirname(__file__)
DATABASES = {
# ...
'NAME': join(PROJECT_DIR, 'sqlite.db'),
# ...
}
请参阅Can I make the Django database path (for sqlite3) "cross-platform"?