1

forms.pyの特定のモジュールにフォームフィールドをインポートする際に問題が発生しました。次のコードがあります

from django import forms
from django.forms import ModelForm
from koalified.seeker.models import *
from django.contrib.auth.models import User

class RegistrationForm(ModelForm):
    username = forms.CharField(label=(u'Username'))
    password = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))
    ver_password = forms.CharField(label=(u' Verify Password'), widget=forms.PasswordInput(render_value=False))
    email = forms.EmailField()

    class Meta:
            model = Seeker
            exclude = ('user','verified','premium')

    def clean_username(self):
            ''' Checking username availability '''
            username = self.cleaned_data['username']
            try:
                    User.objects.get(username=username)
            except User.DoesNotExist:
                    if len(username)  >= 5 and len(username) < 21:
                        return self.cleaned_data['username']
                    else:
                        raise forms.ValidationError("Username must be between 5 and 20 characters")
            raise forms.ValidationError("That username is already in use")

    def clean_ver_password(self):
            password = self.cleaned_data.get('password')
            ver_password = self.cleaned_data.get('ver_password')

            if not ver_password:
                    raise forms.ValidationError("You must confirm your password")
            if password != ver_password:
                    raise forms.ValidationError("Passwords do not match")
            return ver_password

私はビューが存在しないというエラーを取得し続けます。これは私が調査したものであり、シェルに入ってインポートを試みることを提案しました。これがインポートの次の出力です

Traceback (most recent call last):
    File "<console>", line 1, in <module>
    File "/home/jmcguffee1/django.koalified.com/koalified/koalified/seeker/forms.py", line 6, in <module>
    class RegistrationForm(ModelForm):
    File "/home/jmcguffee1/django.koalified.com/koalified/koalified/seeker/forms.py", line 7, in RegistrationForm
    username = forms.CharField(label=(u'Username'))
    AttributeError: 'module' object has no attribute 'CharField'

私はいくつかの問題を調べて、人々がスペルの問題を抱えている可能性があることを発見しましたが、これを何度も試しましたが、ログインフォームなどの他のモジュールのフォームをロードするためにこれを取得することはできません

from django.contrib.auth.models import User
from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(label=(u'Username'))
    password = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))

フィールドを手動でインポートしようとしましたが、機能します。

from django.forms.fields import CharField, EmailField
username = CharField()

これは問題なく動作します。シェルに戻ってdjango.formsをインポートし、そこからロードしようとしました。

fromdjangoインポートフォームusername=forms.CharField(label =(u'Username'))username

私はmodels.pyとviews.pyで周期的な呼び出しをチェックしましたが、djangoフォームの他のインポートはありません。この特定のモジュールがフォームフィールドを正しくロードしていないようです。これが十分に明確でない場合は、より多くの情報を提供できます。

これが答えの解決策でした

>>> from django import forms
>>> print 'form is : ', forms
form is :  <module 'django.forms' from '/home/jmcguffee1/django.koalified.com/kf/lib/python2.6/site-packages/Django-1.4.3-py2.6.egg/django/forms/__init__.pyc'>
>>> from koalified.seeker.models import *
>>> print 'form is : ', forms
form is :  <module 'django.forms.forms' from '/home/jmcguffee1/django.koalified.com/kf/lib/python2.6/site-packages/Django-1.4.3-py2.6.egg/django/forms/forms.pyc'>
>>>
4

2 に答える 2

0

推測は次のとおりです。models.pyファイルで、フォームモジュールをインポートしますか?私はあなたがそうすると思います。次に、この行が問題です。

from koalified.seeker.models import *

これにより、modelsモジュール内のすべてのグローバル名が現在の名前空間にインポートされます。そして、それらの名前の1つはforms、現在のフォームモジュールを参照しているため、上部のインポートを上書きします。したがってforms、Djangoフォームモジュールではなく、同じモジュールを参照するようになりました。

これが**あなたが決して使用してはならない理由ですfrom x import *from koalified.seeker import models実行して参照するか、実行するmodels.Seekerなどのいずれかですfrom koalified.seeker.models import Seeker, TheOtherModel。IMOの方が優れていますが、それは好みの問題です。

于 2013-03-25T15:57:29.470 に答える
0

スターインポートは、名前空間を混乱させる確実な方法です。以下に示すように、いくつかのprintステートメントを追加してみて、スターのインポート後に「フォーム」名がバインドされているかどうかを確認してください

from django import forms
print "forms is :", forms
# ....
from koalified.seeker.models import *
print "forms is :", forms
于 2013-03-25T15:58:16.877 に答える