2017-11-26 8 views
0

sqlite3整合性エラー - データ型の不一致が表示されています。しかし、 python manage.py migratepython manage.py makemigrations が正常に動作します。私のフォームデータは有効です。ビューでevent.saveを使用してデータをデータベースに保存しようとすると、このエラーが発生します。event.save()がDjangoでエラーを返す

私のモデルは次のとおりです。

class createEvent(models.Model): 
    FirstName = models.CharField(max_length=150) 
    LastName = models.CharField(max_length=150) 
    EventName = models.CharField(max_length=150) 
    EventOrganizer = models.CharField(max_length=150) 
    Location = models.CharField(max_length=200) 
    Date = models.DateField() 
    LastDateOfRegistration = models.DateField() 
    EventDetails = models.TextField() 

私のviews.pyは

def create_event(request): 
    title = "Drizzlelore" 
    subtitle = "Create event" 
    if request.method == "POST": 
     form = createEventForm.createEventForm(request.POST) 
     print(form.errors) 
     if form.is_valid(): 
      fname = form.cleaned_data.get('FirstName') 
      lname = form.cleaned_data.get('LastName') 
      eventName = form.cleaned_data.get('EventName') 
      eventOrganizer = form.cleaned_data.get('EventOrganizer') 
      location = form.cleaned_data.get('Location') 
      date = form.cleaned_data.get('Date') 
      lastDateofReg = form.cleaned_data.get('LastDateOfRegistration') 
      eventDetails = form.cleaned_data.get('EventDetails') 
      event = form.save(commit=False) 
      event.save() 
      context = { 
       "title":title, 
       "subtitle":subtitle, 
       "form" : form, 
      } 
      return HttpResponse("Success form submitted") 
     else: 
      print("Form not valid") 
      return HttpResponse("Failure") 
    else: 
     form = createEventForm.createEventForm() 
     context = { 
      "title":title, 
      "subtitle":subtitle, 
      "form":form, 
     } 
    return render(request,"home/createevents.html",context) 

私のフォームは

class createEventForm(forms.ModelForm): 
    class Meta: 
     model = createEvent 
     fields = [ 
      'FirstName', 
      'LastName', 
      'EventName', 
      'EventOrganizer', 
      'Location', 
      'Date', 
      'LastDateOfRegistration', 
      'EventDetails', 
     ] 

EDITですこれは、インタラクティブシェルで実行されたときにモデルに表示されるフィールドです。

>>> createEvent._meta.get_fields() 
(<django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: FirstName>, <django.db.models.fields.CharField: LastName>, <django.db.models.field 
s.CharField: EventName>, <django.db.models.fields.CharField: EventOrganizer>, <django.db.models.fields.CharField: Location>, <django.db.models.fields.DateField: 
Date>, <django.db.models.fields.DateField: LastDateOfRegistration>, <django.db.models.fields.TextField: EventDetails>) 

これは完全なエラー・トレースです:あなたは、フォームデータが既にrequest.POSTを通過しているので

event = form.save(commit=False) 
event.save() 

を記述する必要はいけない

Internal Server Error: /drizzlelore/createEvents 
Traceback (most recent call last): 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\backe 
nds\utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\backe 
nds\sqlite3\base.py", line 328, in execute 
    return Database.Cursor.execute(self, query, params) 
sqlite3.IntegrityError: datatype mismatch 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\core\han 
dlers\exception.py", line 41, in inner 
    response = get_response(request) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\core\han 
dlers\base.py", line 187, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "C:\Users\eloixir\Desktop\mysite\mysite\home\views.py", line 67, in creat 
e_event 
    event.save() 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\base.py", line 807, in save 
    force_update=force_update, update_fields=update_fields) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\base.py", line 837, in save_base 
    updated = self._save_table(raw, cls, force_insert, force_update, using, upda 
te_fields) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\base.py", line 923, in _save_table 
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\base.py", line 962, in _do_insert 
    using=using, raw=raw) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\manager.py", line 85, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\query.py", line 1076, in _insert 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\model 
s\sql\compiler.py", line 1107, in execute_sql 
    cursor.execute(sql, params) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\backe 
nds\utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\backend 
    File "C:\Users\eloixir\Desktop\mysite\myvenv\lib\site-packages\django\db\backe 
nds\sqlite3\base.py", line 328, in execute 
    return Database.Cursor.execute(self, query, params) 
django.db.utils.IntegrityError: datatype mismatch 
+0

Djangoでは、モデルに主キーがあることが必要です –

+0

しかし、デフォルトではDjangoのモデルにidフィールドが追加されています。それはそれ自身のプライマリキーとして機能しませんか? – Gayathri

+0

SQLiteデータベースにIDフィールドが本当にありますか? –

答えて

0

、これだけ

をやって
form.save(commit=False) 

はy ou。また、いくつかの操作をしない限り、フォームのcleaned_dataを取得する必要はありません。 お手伝いをしてください。

+0

p = createEvent.objects.all()を与えてデータが対話型シェルのdbに格納されているかどうかを確認しようとすると、print(p)がsqlite3.OperationalErrorを返します: :home_createevent.idエラー!!! – Gayathri

+0

いくつかの小切手を行います。最初にアプリがsettings.pyのINSTALLED_APPSの下に追加されているかどうか、2回目の実行とマイグレーション。それが役に立てば幸い。 –

+0

はい、アプリはsettings.pyとmakemigrationにあり、移行はうまくいきます。しかし、私はエラーが発生している:( – Gayathri

関連する問題