OneToOneField - OperationalError - PullRequest
       5

OneToOneField - OperationalError

0 голосов
/ 04 марта 2012

Я использую 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) 

1 Ответ

3 голосов
/ 04 марта 2012

Похоже, вы добавили поле пользователя в модель, но не добавили столбец в базу данных.

Команда syncdb создаст для вас новые таблицы, но не добавляет и не изменяет столбцы втаблицы, которые уже существуют.У вас есть несколько вариантов:

Если вы все еще разрабатываете свое приложение и у вас еще нет важных данных, проще всего удалить таблицу, а затем снова запустить syncdb, чтобы воссоздать ее.

Если вы не можете удалить таблицу, вам нужно вручную запустить команду SQL, чтобы добавить столбец.

Возможно, вы также захотите изучить схему south , схемуинструмент миграции для Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...