2015-01-03 2 views
0

Я создал модель с django.db.models.ModelAttributeError __exit__ при попытке сохранить model.db из формы в Django 1.7

class MyModel(models.Model): 
    my_field = models.CharField(max_length=50) 

и форму с помощью django.forms.ModelForm.

class MyModelForm(ModelForm): 

    class Meta: 
     model = MyModel 
     exclude = [] 

Из-за ту предыдущей проблемой overidding инициализации, когда я не должен иметь, я модульное тестирование, что MyModel.save() работал. Таким образом, единичный тест проходит. Я также могу заполнить базу данных сценарием init, поэтому я не думаю, что есть проблемы с моей моделью. Но я не могу его сохранить, когда вы вводите данные из формы.

Это код, я использую, чтобы восстановить свой объект из формы:

if request.method == 'POST': 
    form = MyModelForm(request.POST) 
    if form.is_valid(): 
     my_model_object = form.save() 
     return render(request, 'validate.html') 
else: 
    form = MyModelForm() 
return render(request, 'create_mymodel.html', 
       {'form': form}) 

Infortunately, когда я звоню сохранить() Я получаю следующее сообщение об ошибке:

my_project/views/views.py in my_function 
my_model_object = form.save() 
...django/db/models/base.py in save 
force_update=force_update, update_fields=update_fields) 
...django/db/models/base.py in save_base 
self._save_parents(cls, using, update_fields) 
...django/db/models/base.py in _save_parents 
self._save_table(cls=parent, using=using, update_fields=update_fields) 
...django/db/models/base.py in _save_table 
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
...django/db/models/base.py in _do_insert 
using=using, raw=raw) 
...django/db/models/manager.py in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
...django/db/models/query.py in _insert 
    return query.get_compiler(using=using).execute_sql(return_id) 
...django/db/models/sql/compiler.py in execute_sql 
    with self.connection.cursor() as cursor: 

AttributeError at my_url/ 
__exit__ 

Request Method:  POST 
Request URL: http://localhost:8000/my_url/ 
Django Version:  1.7 
Exception Type:  AttributeError 
Exception Value: __exit__ 

Это работает, если я использую save (commit = False), но, конечно, мой объект не находится в базе данных. Я также попытался использовать все атрибуты в форме и создать экземпляр и сохранить MyModel, но он тоже не работает. На самом деле, если я попытаюсь сохранить его в любой момент, я получу ошибку. Я основывал свой код на https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/.

Любые предложения?

+2

Вместо прозаического «У меня есть« AttributeError __exit__ », идущий весь путь» ... вы должны вставить трассировку. Это было бы более полезно. – glglgl

+0

Извините, очень верно, я добавил stacktrace, надеюсь эта помощь. –

+0

Хотя очень дикое предположение, единственное, что я вижу немного, это то, что атрибут 'exclude' - пустой список. Попробуйте изменить это на 'fields =" __all __ "' – karthikr

ответ

0

Как я должен был поставить это в производство, даже если это не сработало, я сделал .. Проблема исчезла. Поэтому я решил, что это проблема конфигурации базы данных. Тогда проблема оказалась идентичной в несвязанном проекте django, где мне пришлось скопировать вставку конфигурации отладки.

Оказалось, что это было вызвано конфигурацией панели инструментов отладки django, я точно не знаю, где, потому что я просто подавил ее. Проверьте свой файл настроек, если у вас такая же проблема!