2012-03-04 2 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

* 오류 메시지가 잘못 되었습니까? –

+0

'exclude'에 후행 쉼표가 없습니다 -'exclude = ('user',)' – Alasdair

+0

@Alasdair : 변경되었지만 여전히 같은 오류입니다 – rnk

답변

3

그것은 당신이 모델에 사용자 필드를 추가 한 것처럼 보이지만,하지 열을 데이터베이스에 추가했습니다.

syncdb 명령은 새 테이블을 만들지 만 이미 존재하는 테이블의 열을 추가하거나 수정하지 않습니다. 몇 가지 옵션이 있습니다 :

아직 앱을 개발 중이며 아직 중요한 데이터가없는 경우 가장 쉬운 방법은 테이블을 삭제 한 다음 syncdb를 다시 실행하여 다시 작성하는 것입니다.

테이블을 삭제할 수없는 경우 수동으로 SQL 명령을 실행하여 열을 추가해야합니다.

Django의 스키마 이전 도구 south도 조사하고 싶을 수 있습니다.

+0

감사합니다. @Alasdair. 하지만 지금은 기본 모델과 일치하는 쿼리가 존재하지 않습니다. – rnk

+0

DoesNotExist at/unnamed/ 예외 값 : BasicModel 일치하는 쿼리가 존재하지 않습니다. 예외 위치 : \t /usr/local/lib/python2.7/dist-packages/django/db/models/query.py in 349 번째 라인 Traceback : form = BasicModelForm (request.POST, request.FILES, instance = request.user.profile) – rnk

+0

프로파일을 만들기 전에 문제가'instance = request.user.profile'입니다. 프로파일이 아직 존재하지 않으면 인스턴스로 전달할 수 없습니다. 'commit = False'로 저장하고 사용자를 설정 한 다음 저장하십시오. 예제를 보시려면이 [answer] (http://stackoverflow.com/a/9332588/113962)를보십시오. – Alasdair

관련 문제