表单和数组可能存在错误?一个视图上的多个表单和模型中的数组字段---:Django和Postgres

表单和数组可能存在错误?一个视图上的多个表单和模型中的数组字段---:Django和Postgres,django,postgresql,django-forms,django-views,django-1.8,Django,Postgresql,Django Forms,Django Views,Django 1.8,我犯了一个奇怪的错误,找不到解决办法。该视图用于为用户创建数据条目,但具有返回和编辑的选项,因此该视图用于处理更新 该代码只在一个表单被拉入视图时工作,而在多个表单上不工作,然后它会给出一个无意义的错误 这是一个拥有自己的URL.py集的应用程序 我已经在表单字段中输入了目前的原始数据,以便在这些字段中输入[1,2,3,4,5] 这一切正常,没有任何错误或异常数据在现场更新,但当我通过增量开发增加技能时,它显示了这一错误: 数组维度中缺少[1] 第1行:…akeProfile_skills SE

我犯了一个奇怪的错误,找不到解决办法。该视图用于为用户创建数据条目,但具有返回和编辑的选项,因此该视图用于处理更新

该代码只在一个表单被拉入视图时工作,而在多个表单上不工作,然后它会给出一个无意义的错误

这是一个拥有自己的URL.py集的应用程序

我已经在表单字段中输入了目前的原始数据,以便在这些字段中输入[1,2,3,4,5] 这一切正常,没有任何错误或异常数据在现场更新,但当我通过增量开发增加技能时,它显示了这一错误:

数组维度中缺少[1] 第1行:…akeProfile_skills SET user_id=11,skills='[0,1,2,3

我正在使用: 博士后1.9 蟒蛇3.4 Django 1.8.7

代码:

view.py

@login_required
def step2(request):

    title =" Step 2 of 4 "
    # if request.method.upper() == 'POST':
    #     print('hello free stackoverflow points')

    #user_answer = UserAnswer.objects.get(user=request.user, question =instance)
    #profile, created = Profile.objects.get_or_create(user=request.user)
    form2p0 = step2p0Form()
    form2p1 = step2p1Form()
    form2p2 = step2p2Form()


    context ={
        "title":title,
        "form2p0":form2p0,
        "form2p1":form2p1,
        "form2p2":form2p2,

    }
    #skills, created = Skills.objects.get_or_create(user=request.user)
    if request.method.upper() == 'POST':

        interests, created = Interests.objects.get_or_create(user=request.user)
        skills, created = Skills.objects.get_or_create(user=request.user)
        languages, created = Languages.objects.get_or_create(user=request.user)

        form2p0 = step2p0Form(request.POST or None, instance= interests)
        form2p1 = step2p1Form(request.POST or None, instance= skills)
        form2p2 = step2p2Form(request.POST or None, instance= languages)

        context ={
            "title":title,
            "form2p0":form2p0,
            "form2p1":form2p1,
            "form2p2":form2p2,

        }

        if  form2p0.is_valid() and form2p1.is_valid() and form2p2.is_valid():

            instance2p0 =form2p0.save(commit=False)
            instance2p1 =form2p1.save(commit=False)
            instance2p2 =form2p2.save(commit=False)

            interests = form2p0.cleaned_data.get('interests')
            instance2p0.user = request.user
            instance2p0.interest = interests

            skills= form2p1.cleaned_data.get('skills')
            instance2p1.user = request.user
            instance2p1.skills = skills

            languages =  form2p2.cleaned_data.get('languages')
            instance2p2.languages = languages

            instance2p0.save()
            instance2p1.save()
            instance2p2.save()


            return HttpResponseRedirect(reverse('makeProfile:step3'))

    return render(request, "profile/step2.html", context)
form.py

class step2p0Form(forms.ModelForm):
    class Meta:
       model =Interests
       fields = ['interests']

    interests = forms.CharField(required = True)

class step2p1Form(forms.ModelForm):
    class Meta:
        model =Skills
        fields = ['skills']

    skills = forms.CharField(required = True)

class step2p2Form(forms.ModelForm):
    class Meta:
        model = Languages
        fields =['languages']

    languages = forms.CharField()
model.py

class Skills(models.Model):

user = models.OneToOneField(User,primary_key=True)
#skills = models.CharField(max_length = 128, null=True, blank=True)
skills =  ArrayField(models.IntegerField( null=True, blank=True, default = -1 ))


class Interests(models.Model):

user = models.OneToOneField(User,primary_key=True)
#interests = models.CharField(max_length = 128, null=True, blank=True)
interests =  ArrayField(models.IntegerField( null=True, blank=True, default = -1))




class Languages(models.Model):

user = models.OneToOneField(User,primary_key=True)

languages =  ArrayField(models.CharField(max_length=50,blank=True,default="None"))



#*******************SIGNALS***********************


@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_profile_handler(sender, instance, created, **kwargs):

if not created:
   print("hello#########")
   return

profile = Profile(user=instance)
interests = Interests(user=instance)
skills= Skills(user=instance)
languages = Languages(user=instance)

interests.interests = [0]
skills.skills = [0]
languages.languages = ["None"]

skills.save()
interests.save()
languages.save()
profile.save()



DataError at /makeProfile/step2/
missing "]" in array dimensions
LINE 1: ...akeProfile_skills" SET "user_id" = 11, "skills" =  '[0,1,2,3,...
                                                         ^
Request Method: POST
Request URL:    http://127.0.0.1:8888/makeProfile/step2/
Django Version: 1.8.7
Exception Type: DataError
Exception Value:    
missing "]" in array dimensions
LINE 1: ...akeProfile_skills" SET "user_id" = 11, "skills" =  '[0,1,2,3,...
                                                         ^
Exception Location: /home/g4/django/pureRu/lib/python3.4/site-p   ackages/django/db/backends/utils.py in execute, line 64
Python Executable:  /home/g4/django/pureRu/bin/python
Python Version: 3.4.3
Python Path:    
['/home/g4/django/pureRu/src',
'/home/g4/django/pureRu/lib/python3.4',
'/home/g4/django/pureRu/lib/python3.4/plat-x86_64-linux-gnu',
'/home/g4/django/pureRu/lib/python3.4/lib-dynload',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/home/g4/django/pureRu/lib/python3.4/site-packages']
Server time:    Fri, 27 Nov 2015 18:42:54 +0000
回溯:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8888/makeProfile/step2/

Django Version: 1.8.7
Python Version: 3.4.3
Installed Applications:
('django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
'registration',
'newsletter',
'questions',
'makeProfile')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
回溯:

    File "/home/g4/django/pureRu/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
      132.                     response = wrapped_callback(request,   *callback_args, **callback_kwargs)
    File "/home/g4/django/pureRu/lib/python3.4/site-  packages/django/contrib/auth/decorators.py" in _wrapped_view
      22.                 return view_func(request, *args, **kwargs)
     File "/home/g4/django/pureRu/src/makeProfile/views.py" in step2
      111.             instance2p1.save()
    File "/home/g4/django/pureRu/lib/python3.4/site-  packages/django/db/models/base.py" in save
      734.                        force_update=force_update,   update_fields=update_fields)
     File "/home/g4/django/pureRu/lib/python3.4/site-packages/django/db/models/base.py" in save_base
      762.             updated = self._save_table(raw, cls, force_insert,  force_update, using, update_fields)
    File "/home/g4/django/pureRu/lib/python3.4/site- packages/django/db/models/base.py" in _save_table
      827.                                       forced_update)
      File "/home/g4/django/pureRu/lib/python3.4/site-  packages/django/db/models/base.py" in _do_update
      877.         return filtered._update(values) > 0
      File "/home/g4/django/pureRu/lib/python3.4/site- packages/django/db/models/query.py" in _update
      580.         return query.get_compiler(self.db).execute_sql(CURSOR)
File "/home/g4/django/pureRu/lib/python3.4/site- packages/django/db/models/sql/compiler.py" in execute_sql
      1062.         cursor = super(SQLUpdateCompiler,   self).execute_sql(result_type)
      File "/home/g4/django/pureRu/lib/python3.4/site-  packages/django/db/models/sql/compiler.py" in execute_sql
  840.             cursor.execute(sql, params)
File "/home/g4/django/pureRu/lib/python3.4/site-packages/django/db/backends/utils.py" in execute
       79.             return super(CursorDebugWrapper, self).execute(sql,   params)
      File "/home/g4/django/pureRu/lib/python3.4/site-  packages/django/db/backends/utils.py" in execute
       64.                 return self.cursor.execute(sql, params)
       File "/home/g4/django/pureRu/lib/python3.4/site- packages/django/db/utils.py" in __exit__
      98.                 six.reraise(dj_exc_type, dj_exc_value, traceback)
      File "/home/g4/django/pureRu/lib/python3.4/site-packages/django/utils/six.py" in reraise
      685.             raise value.with_traceback(tb)
      File "/home/g4/django/pureRu/lib/python3.4/site-  packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

     Exception Type: DataError at /makeProfile/step2/
     Exception Value: missing "]" in array dimensions
     LINE 1: ...akeProfile_skills" SET "user_id" = 11, "skills" =   '[0,1,2,3,..
.^
我希望这不是一个打字错误,如果你读了所有这些,但我有两个眼睛在这个代码上,并检查了一百万次…所以在这个阶段,我只是希望有人在那里可以帮助


谢谢

所以………不确定这是否是修复,但它起作用了,我所改变的只是事物内部的顺序:像那样分组,然后魔术…可能是上面代码中的一个输入错误,但它现在起作用了,因此我使用form2p0.savecommit=False和instance2p0.save的顺序

因此:

    instance2p0 = form2p0.save(commit = False)
    interestsEdit = form2p1.cleaned_data.get('interests')
    instance2p0.Interests = interestsEdit
    instance2p0.save()


    instance2p0 = form2p0.save(commit = False)
    skillsEdit = form2p1.cleaned_data.get('skills')
    instance2p0.Skills = skillsEdit
    instance2p0.save()

什么是ArrayField?它来自哪里?代码是什么?模型中的数组字段映射到Postgres dbpostgres1.9中的类型数组?很有趣: