Python 无法删除Django中的用户对象

Python 无法删除Django中的用户对象,python,django,exception,Python,Django,Exception,我的Django视图函数中有一个try-except块,如果任何操作失败,它将删除在try块中创建的用户对象。当我尝试删除该用户时,会收到此错误消息 OperationalError: no such table: reversion_revision 同样的问题也发生在Django管理员中。我在发现类似的错误发生在其他人身上时遇到了问题,我不知道为什么会发生这种情况。我在块中删除的所有其他对象都将删除,但不会出现任何问题 @csrf_exempt def signup(request):

我的Django视图函数中有一个try-except块,如果任何操作失败,它将删除在try块中创建的用户对象。当我尝试删除该用户时,会收到此错误消息

OperationalError: no such table: reversion_revision
同样的问题也发生在Django管理员中。我在发现类似的错误发生在其他人身上时遇到了问题,我不知道为什么会发生这种情况。我在块中删除的所有其他对象都将删除,但不会出现任何问题

@csrf_exempt
def signup(request):
    # """Register a new account with a new org."""
    if request.is_ajax():
        if request.method == "POST":
            form = SignUp(requestPost(request))

        if form.is_valid():
            cleaned_data = form.cleaned_data

            email = cleaned_data['email']
            password = cleaned_data['password']
            org_name = cleaned_data['org_name']
            org_username = cleaned_data['org_username']

            if cleaned_data['token']:
                invite_token = cleaned_data['token']
            else:
                invite_token = cleaned_data['invite']

            try:
                account = Account.objects.create(email=email, password=password)
                x = email[:30]
                userExists = User.objects.filter(username=email[:30])
                if not userExists:
                    if len(email) < 30:
                        user = User.objects.create_user(email, email, password)
                    else:
                        email = email[:30]
                        user = User.objects.create_user(email, email, password)

                if invite_token:
                    if ThreadInvite.objects.filter(token=invite_token):
                        invitation = ThreadInvite.objects.get(token=invite_token)
                        thread = Thread.objects.get(id=invitation.thread.id)
                        ThreadMember.objects.create(thread=thread, account=account)
                    else:
                        invitation = OrgInvite.objects.get(token=invite_token)
                        if invitation.used:
                            raise Exception("invitation code is invalid")
                        org = Org.objects.get(id=invitation.org.id)
                        OrgMember.objects.create(org=org, account=account)
                        invitation.used = False
                        invitation.save()
                        add_to_welcome(org_id=org.id, account_id=account.id)

                if org_username and org_name:
                    org = Org.objects.create(name=org_name, username=org_username,
                                             actor=account)
                    OrgMember.objects.create(account=account, org=org)
                    Thread.objects.create(name='welcome', account=account, owner=account, org=org,
                                          purpose='To welcome new members to the team.')
                    add_to_welcome(org_id=org.id, account_id=account.id)

                login(request)

                md = mandrill.Mandrill(settings.MANDRILL_API_KEY)
                t = invite_token.replace(' ', '+')
                url = "https://localhost:8000/verify/{}".format(t)
                message = {
                    'global_merge_vars': [
                        {
                            'name': 'VERIFICATION_URL',
                            'content': url
                        },
                    ],
                    'to': [
                        {
                            'email': 'tim@millcreeksoftware.biz',
                        },
                    ],
                    'subject': 'Welcome to Human Link',
                }
                message['from_name'] = message.get('from_name', 'Humanlink')
                message['from_email'] = message.get('from_email',
                                                    'support@humanlink.co')
                try:
                    md.messages.send_template(
                        template_name='humanlink-welcome', message=message,
                        template_content=[], async=True)
                except mandrill.Error as e:
                    logging.exception(e)
                    raise Exception(e)

                context = {
                    'message': 'ok'
                }

                return composeJsonResponse(200, "", context)

            except Exception, e:
                logging.error(e)
                Account.objects.filter(email=email, password=password).delete()
                User.objects.filter(username=email[:30]).delete()
                Org.objects.filter(name=org_name, username=org_username).delete()

这里的问题不在代码中,而在数据库状态中。看起来您添加了<代码>django reversion应用程序。这将在项目中添加新模型。跑

python manage.py syncdb
或者如果你在1.8+

python manage.py migrate
更新

如果这没有帮助,那么您需要首先使用第三方应用程序创建迁移

python manage.py makemigrations name_3rd_party_app
在第三方应用程序上创建迁移时要小心。当您运行
makemigrations
时,它会在第三方应用程序包中创建迁移。所以它不会出现在你的代码中。在您部署它或其他用户使用它之后,将不会有此迁移。因此,您需要使用

然后运行
migrate

尝试运行

/manage.py makemigrations修订版

然后

/manage.py迁移

或者删除数据库文件,然后重新开始


/manage.py migrate

Hmmm我运行了migrate,它说所有内容都是最新的“没有要应用的迁移”。python manage.py makemigrations reversion是否创建了任何内容?您使用的是什么版本的django和django reversion?为reversion应用程序进行迁移,而不是进行迁移。我不知道为什么在没有指定应用程序的情况下执行“python manage.py makemigrations”就不能实现应用程序范围内的迁移,但这是可行的。谢谢@蒂莫西约瑟夫班尼阅读更新。可能有一些您需要知道的问题。嗯,那么在MIGRATON_模块字典中的我的设置文件中,我会把{'reversion':'reversion.db_migrations'}放进去吗?除了您要问的实际问题之外,我是否可以建议您使用来扭曲您的函数?它的目的是准确地处理您的情况,在发生错误时回滚更改。
python manage.py makemigrations name_3rd_party_app