2012-03-04 51 views
0

我正在使用與用戶連接的OneToOneField來完成表單提交任務。但是我得到了OperationalError。這是我用來在登錄後提供表單的一個應用程序。登錄過程是使用其他應用程序成功完成的。OneToOneField - OperationalError

Models.py:

from django.db import models 
from django.forms import ModelForm 
from sorl.thumbnail import ImageField 
from django.contrib.auth.models import User 

class BasicModel(models.Model): 
    user = models.OneToOneField(User, unique=True, related_name='profile') 
    name = models.CharField(max_length=200) 
    dob = models.DateField() 
    photo = ImageField(upload_to='sample') 

class BasicModelForm(ModelForm): 
    class Meta: 
      model = BasicModel 
      exclude = ('user',) 

Views.py:

@login_required 
def BasicView(request): 
    if request.method == 'POST': 
      form = BasicModelForm(request.POST, request.FILES, instance=request.user.profile) 
      if form.is_valid(): 
        data = form.save() 
        im = get_thumbnail(data.photo, '100x100', crop='center', quality=99) 
        return preview(request, data.id, im) 
    else: 
      form = BasicModelForm() 
    return render_to_response("unnamed.html", {'form': form}, context_instance=RequestContext(request)) 

def preview(request, id, im): 
    obj = get_object_or_404(BasicModel, pk=id) 
    return render_to_response("preview.html", {'obj': obj, 'im': im}) 

錯誤:

Exception Type: OperationalError 
Exception Value: (1054, "Unknown column 'unnamed_basicmodel.user_id' in 'field list'") 
Exception Location: /usr/lib/pymodules/python2.7/MySQLdb/connections.py in defaulterrorhandler, line 36 
Traceback: form = BasicModelForm(request.POST, request.FILES, instance=request.user.profile) 
+0

*錯誤信息是否錯誤? – 2012-03-04 14:18:14

+0

你的'exclude'缺少一個尾隨逗號 - 它應該是'exclude =('user',)' – Alasdair 2012-03-04 14:28:16

+0

@Alasdair:我改變了,但仍然是相同的錯誤 – rnk 2012-03-04 14:34:19

回答

3

看起來你已經添加了用戶字段到模型中,但不將該列添加到數據庫。

syncdb命令將爲您創建新表,但它不會添加或修改已存在的表中的列。你有幾個選擇:

如果你還在開發你的應用程序,並且還沒有任何重要的數據,最簡單的方法就是刪除表,然後再次運行syncdb來重新創建它。

如果您不能刪除表,那麼您需要手動運行SQL命令來添加該列。

您可能還想調查Django的模式遷移工具south

+0

謝謝@Alasdair。但現在我得到基本模型匹配查詢不存在。 – rnk 2012-03-05 09:40:10

+0

DoesNotExist at /未命名/ 異常值:BasicModel匹配查詢不存在。 異常位置:\t /usr/local/lib/python2.7/dist-packages/django/db/models/query.py in get,line 349 Traceback:form = BasicModelForm(request.POST,request.FILES,instance = request.user.profile) – rnk 2012-03-05 09:41:19

+0

問題是你在創建配置文件之前正在執行'instance = request.user.profile'。如果配置文件尚不存在,則無法將其作爲實例傳遞。用'commit = False'保存,然後設置用戶然後保存。有關示例,請參閱此[回答](http://stackoverflow.com/a/9332588/113962)。 – Alasdair 2012-03-05 10:34:30

相關問題