cannot import form in django

2019-08-10 14:32发布

问题:

I am facing annoying problem.. i was trying to extend user registation with custom fields... as below

import hashlib import datetime import hmac from django.db import models

from django.contrib.auth.models import User
from ecpCommon.models import StateModel
from ecpCommon.enum import enumauto
from ecpPayments.models import PaymentCard
from registration.signals import user_registered
from apps.ecpUser.models import UserProfile
from apps.ecpMerchant.forms import RegistrationFormEx


   class MerchantProfile(StateModel):
      user = models.OneToOneField(UserProfile, related_name="merchant_profile")
      payment_card = models.OneToOneField(PaymentCard, related_name="merchant_profile")
      current_state = models.IntegerField('State', choices=STATE_CHOICES)
      name = models.CharField('Merchant Name', max_length=64)

      def user_created(sender, user, request, **kwargs):
            form = RegistrationFormEx(data=request.POST)
            new_user = User.objects.get(username=request.POST['username'])
            digest=hmac.new("qnscAdgRlkIhAUPY44oiexBKtQbGY0orf7OV1I50", str(request.POST['password1']),hashlib.sha1).hexdigest()
            new_profile = UserProfile(user=new_user,api_key=digest)
            new_profile.save()
            #now add other fields including password hash as well
            uid = new_profile.id

            merchant_profile = MerchantProfile(user_id=uid,
                create_time=datetime.datetime.now(),
                modified_time=datetime.datetime.now(),
                payment_card_id=uid,
                current_state=1,
                name=request.POST['name'],
                 )
            merchant_profile.save()

my forms is as follow

from django import forms
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
from registration.models import RegistrationProfile
from apps.ecpMerchant.models import Category

class RegistrationFormEx(RegistrationForm):
    #ADD ALL CUSTOM FIELDS BELOW
    name=forms.CharField()

but it is showing following error log.. earlier it was working .. later the error came.. i have several modification in models with other tables... but how it effect this registration

C:\Python27\Lib\site-packages\django\bin\ecp>manage.py runserver
Validating models...

Unhandled exception in thread started by <bound method Command.inner_run of <dja
ngo.contrib.staticfiles.management.commands.runserver.Command object at 0x02DC0A
B0>>
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\management\commands\runserver.
py", line 91, in inner_run
    self.validate(display_num_errors=True)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 266,
 in validate
    num_errors = get_validation_errors(s, app)
  File "C:\Python27\lib\site-packages\django\core\management\validation.py", lin
e 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 158, in
 get_app_errors
    self._populate()
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 67, in
_populate
    self.load_app(app_name)
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 88, in
load_app
    models = import_module('.models', app_name)
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
    __import__(name)
  File "C:\Python27\Lib\site-packages\django\bin\ecp\apps\ecpMerchant\models.py"
, line 10, in <module>
    from apps.ecpMerchant.forms import RegistrationFormEx
  File "C:\Python27\Lib\site-packages\django\bin\ecp\apps\ecpMerchant\forms.py",
 line 5, in <module>
    from apps.ecpMerchant.models import Category
  File "C:\Python27\Lib\site-packages\django\bin\ecp\apps\ecpMerchant\models.py"
, line 10, in <module>
    from apps.ecpMerchant.forms import RegistrationFormEx
ImportError: cannot import name RegistrationFormEx

回答1:

Circular import...

You have forms importing models which is importing forms.