我收到 Django/Pythonic 错误,但我不知道如何解决它。我尝试了很多方法,但到目前为止错误仍然存在。
\n\n我的错误是:
\n\n\n\n\nhasattr():属性名称必须是字符串
\n
这个错误来自我的 Django 表单。当我点击验证表单时,我遇到了这个问题。
\n\n我的models.py 文件如下所示:
\n\nclass Individu(models.Model):\n\n NumeroIdentification = models.CharField(max_length=30, null=True, verbose_name=\'Num\xc3\xa9ro Identification physique\', unique=True)\n Civilite = models.CharField(max_length=12,choices=CHOIX_TITRE, verbose_name=\'Civilit\xc3\xa9\')\n NomJeuneFille = models.CharField(max_length=30, verbose_name=\'Nom de jeune fille\', blank=True)\n Nom = models.CharField(max_length=30, verbose_name=\'Nom de famille\')\n Prenom = models.CharField(max_length=30, verbose_name=\'Pr\xc3\xa9nom(s)\')\n Sexe = models.CharField(max_length=30, choices=CHOIX_SEXE, verbose_name=\'Sexe\')\n Statut = models.CharField(max_length=30, choices=CHOIX_STATUT, verbose_name="Statut civil")\n DateNaissance = models.DateField(verbose_name=\'Date de naissance\')\n VilleNaissance = models.CharField(max_length=30, verbose_name=\'Ville de naissance\')\n PaysNaissance = CountryField(blank_label=\'S\xc3\xa9lectionner un pays\', verbose_name=\'Pays de naissance\')\n Nationalite1 = models.CharField(max_length=30, verbose_name=\'Nationalit\xc3\xa9 1\')\n Nationalite2 = models.CharField(max_length=30, verbose_name=\'Nationalit\xc3\xa9 2\', null=True, blank=True)\n Profession = models.CharField(max_length=30, verbose_name=\'Profession\')\n Adresse = models.CharField(max_length=30, verbose_name=\'Adresse\')\n Ville = models.CharField(max_length=30, verbose_name=\'Ville\')\n Zip = models.IntegerField(verbose_name=\'Code Postal\')\n Pays = CountryField(blank_label=\'S\xc3\xa9lectionner un pays\', verbose_name=\'Pays\')\n Mail = models.CharField(max_length=30, verbose_name=\'Email\', blank=True)\n Telephone = models.CharField(max_length=20, verbose_name=\'T\xc3\xa9l\xc3\xa9phone\', blank=True)\n Creation = models.DateTimeField(auto_now_add=True)\n InformationsInstitution = models.CharField(max_length=30, null=False, verbose_name=\'Informations Institution\')\n Utilisateur = models.CharField(max_length=100, null=False, verbose_name="Utilisateur", default=" ")\n Etat = models.CharField(max_length=30, choices=CHOIX_ETAT, default=" ", null=False, verbose_name="Etat")\n\n def save(self, *args, **kwargs):\n for field_name in [\'NomJeuneFille\' ,\'Nom\', \'VilleNaissance\', \'Nationalite1\', \'Nationalite2\', \'Ville\', \'Profession\']:\n val = getattr(self, field_name, False)\n if val:\n setattr(self, field_name, val.upper())\n\n for field_name in [\'Prenom\']:\n val = getattr(self, field_name, False)\n if val:\n new_val = []\n words = val.split()\n for x in words:\n x = x.capitalize()\n new_val.append(x)\n val = " ".join(new_val)\n setattr(self, field_name, val.capitalize())\n\n super(Individu, self).save(*args, **kwargs)\n\n\n def __unicode__(self):\n return \'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\' % (self.id, self.NumeroIdentification, self.Civilite, self.NomJeuneFille ,self.Nom, self.Statut, self.Prenom, \n self.Sexe, self.DateNaissance, self.VilleNaissance, self.PaysNaissance, self.Nationalite1, self.Nationalite2, \n self.Profession, self.Adresse, self.Ville, self.Zip, self.Pays, self.Mail, self.Telephone, self.Etat, self.InformationsInstitution)\nRun Code Online (Sandbox Code Playgroud)\n\n然后,我有我的form.py 文件:
\n\nclass IndividuFormulaire(forms.ModelForm) :\n\n InformationsInstitution = forms.CharField(widget=forms.HiddenInput(), initial=InformationsInstitution.objects.last().Ville.encode(\'utf-8\'))\n Utilisateur = forms.CharField(widget=forms.HiddenInput())\n\n class Meta :\n model = Individu\n fields = [\n \'Etat\', \n \'Utilisateur\', \n \'Civilite\', \n \'NomJeuneFille\',\n \'Prenom\', \n \'Nom\', \n \'Statut\', \n \'Sexe\', \n \'DateNaissance\', \n \'VilleNaissance\', \n \'PaysNaissance\', \n \'Nationalite1\', \n \'Nationalite2\',\n \'Profession\', \n \'Adresse\', \n \'Ville\', \n \'Zip\', \n \'Pays\', \n \'Mail\', \n \'Telephone\', \n \'InformationsInstitution\',]\nRun Code Online (Sandbox Code Playgroud)\n\n我的views.py函数:
\n\n@login_required\ndef Identity_Individu_Form(request) :\n\n success = False\n\n if request.method == \'POST\':\n\n form = IndividuFormulaire(request.POST or None)\n\n if form.is_valid() : \n post = form.save()\n messages.success(request, \'Le formulaire a \xc3\xa9t\xc3\xa9 enregistr\xc3\xa9 !\')\n return HttpResponseRedirect(reverse(\'IndividuResume\', kwargs={\'id\': post.id}))\n\n else:\n messages.error(request, "Le formulaire est invalide !")\n\n else:\n form = IndividuFormulaire()\n form.fields[\'Utilisateur\'].initial = request.user.last_name + " " + request.user.first_name\n return render(request, \'Identity_Individu_Form.html\', {"form" : form})\nRun Code Online (Sandbox Code Playgroud)\n\n数据库有一个特殊性。我使用它是Django routers因为我需要将表单结果保存在多个数据库中,正如您在这张图片中看到的那样。我必须将其保存在DS_CORE.Identity_individu和中DS_PUBLIC.Identity_individu。
所以我的GlobalRouter.py 文件中有:
\n\nclass GlobalRouter(object):\n """\nA router to control all database operations on models in the\nauth application.\n"""\n\n def db_for_read(self, model, **hints):\n """\n Attempts to read auth models go to auth.\n """\n app_list = (\'Identity\')\n\n if model._meta.app_label in app_list:\n return \'default\'\n return None\n\n def db_for_write(self, model, **hints):\n """\n Attempts to write auth models go to auth.\n """\n app_list = (\'Identity\')\n if model._meta.app_label in app_list:\n return (\'DS_Public\',\'default\')\n return None\n\n def allow_relation(self, obj1, obj2, **hints):\n """\n Allow relations if a model in the auth app is involved.\n """\n app_list = (\'Identity\')\n if obj1._meta.app_label in app_list and obj2._meta.app_label in app_list:\n return True\n return None\n\n def allow_migrate(self, db, app_label, model=None, **hints):\n """\n Make sure the auth app only appears in the \'auth\'\n database.\n """\n app_list = (\'Identity\')\n\n if app_label in app_list:\n return db == (\'DS_Public\',\'default\')\n return None\nRun Code Online (Sandbox Code Playgroud)\n\n我没有找到错误所在。我正在加入完整的回溯:
\n\nEnvironment:\n\n\nRequest Method: POST\nRequest URL: http://localhost:8000/Identity/Formulaire/Individus\n\nDjango Version: 1.10.3\nPython Version: 2.7.12\nInstalled Applications:\n[\'Informations\',\n \'django.contrib.admin\',\n \'django.contrib.auth\',\n \'django.contrib.contenttypes\',\n \'django.contrib.sessions\',\n \'django.contrib.messages\',\n \'django.contrib.staticfiles\',\n \'bootstrapform\',\n \'django_countries\',\n \'debug_toolbar\',\n \'chartit\',\n \'Configurations\',\n \'Accueil\',\n \'log\',\n \'Identity\']\nInstalled Middleware:\n[\'django.contrib.sessions.middleware.SessionMiddleware\',\n \'django.middleware.locale.LocaleMiddleware\',\n \'django.middleware.common.CommonMiddleware\',\n \'django.middleware.csrf.CsrfViewMiddleware\',\n \'django.middleware.gzip.GZipMiddleware\',\n \'django.contrib.auth.middleware.AuthenticationMiddleware\',\n \'django.contrib.auth.middleware.SessionAuthenticationMiddleware\',\n \'django.contrib.messages.middleware.MessageMiddleware\',\n \'django.middleware.clickjacking.XFrameOptionsMiddleware\',\n \'django.middleware.security.SecurityMiddleware\',\n \'debug_toolbar.middleware.DebugToolbarMiddleware\']\n\n\n\nTraceback:\n\nFile "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner\n 39. response = get_response(request)\n\nFile "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response\n 249. response = self._get_response(request)\n\nFile "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response\n 187. response = self.process_exception_by_middleware(e, request)\n\nFile "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response\n 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)\n\nFile "/usr/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view\n 23. return view_func(request, *args, **kwargs)\n\nFile "/Users/valentinjungbluth/Desktop/Django/DatasystemsCORE/DatasystemsCORE/Identity/views.py" in Identity_Individu_Form\n 140. post = form.save()\n\nFile "/usr/local/lib/python2.7/site-packages/django/forms/models.py" in save\n 453. self.instance.save()\n\nFile "/Users/valentinjungbluth/Desktop/Django/DatasystemsCORE/DatasystemsCORE/Identity/models.py" in save\n 116. super(Individu, self).save(*args, **kwargs)\n\nFile "/usr/local/lib/python2.7/site-packages/django/db/models/base.py" in save\n 796. force_update=force_update, update_fields=update_fields)\n\nFile "/usr/local/lib/python2.7/site-packages/django/db/models/base.py" in save_base\n 821. with transaction.atomic(using=using, savepoint=False):\n\nFile "/usr/local/lib/python2.7/site-packages/django/db/transaction.py" in __enter__\n 152. connection = get_connection(self.using)\n\nFile "/usr/local/lib/python2.7/site-packages/django/db/transaction.py" in get_connection\n 21. return connections[using]\n\nFile "/usr/local/lib/python2.7/site-packages/django/db/utils.py" in __getitem__\n 205. if hasattr(self._connections, alias):\n\nException Type: TypeError at /Identity/Formulaire/Individus\nException Value: hasattr(): attribute name must be string\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
8196 次 |
| 最近记录: |