django在syncdb之前引用模型

Vinayakshukl

我有一个action.py文件,该文件为我的一个模型的admin页面定义了自定义操作。它使用中间页面(如默认的删除操作),因此具有相应的形式,该形式也在同一文件中声明。

由于某种原因,我按数据库(开发)删除了,现在当我尝试运行syncdb时,它给了我以下错误:

Traceback (most recent call last):
  File "/home/vinayak/pyCharm/helpers/pycharm/django_manage.py", line 23, in <module>
    run_module(manage_file, None, '__main__', True)
  File "/usr/lib/python2.7/runpy.py", line 176, in run_module
    fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 82, in _run_module_code
    mod_name, mod_fname, mod_loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/vinayak/zenatix/customuser/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 284, in execute
    self.validate()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 310, in validate
    num_errors = get_validation_errors(s, app)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/validation.py", line 34, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 196, in get_app_errors
    self._populate()
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name, True)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 99, in load_app
    models = import_module('%s.models' % app_name)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/usr/local/lib/python2.7/dist-packages/debug_toolbar/models.py", line 63, in <module>
    patch_root_urlconf()
  File "/usr/local/lib/python2.7/dist-packages/debug_toolbar/models.py", line 51, in patch_root_urlconf
    reverse('djdt:render_panel')
  File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 480, in reverse
    app_list = resolver.app_dict[ns]
  File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 310, in app_dict
    self._populate()
  File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 262, in _populate
    for pattern in reversed(self.url_patterns):
  File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 346, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 341, in urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/vinayak/zenatix/customuser/customuser/urls.py", line 6, in <module>
    admin.autodiscover()
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/__init__.py", line 29, in autodiscover
    import_module('%s.admin' % app)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/vinayak/zenatix/customuser/iiitd/admin.py", line 3, in <module>
    from actions import grant_read_permission
  File "/home/vinayak/zenatix/customuser/iiitd/actions.py", line 13, in <module>
    class SelectUserForm(forms.Form):
  File "/home/vinayak/zenatix/customuser/iiitd/actions.py", line 16, in SelectUserForm
    clientObj = ClientInfo.objects.all()[:1].get()
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 301, in get
    num = len(clone)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 77, in __len__
    self._fetch_all()
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 854, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 710, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 781, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 69, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 99, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "iiitd_clientinfo" does not exist
LINE 1: ...ientinfo"."id", "iiitd_clientinfo"."corp_id" FROM "iiitd_cli...

iiitd是我的一个应用程序的名称。发生这种情况的原因是,因为actions.py导入了iiitd_clientinfo模型-但是显然还不存在。目前,我通过排除/注释我的actions.py文件来使其工作。当然,需要解决吗?

我尝试了以下方法:

  1. 在syncdb之前向南迁移-同样的错误。
  2. 整理INSTALLED_APPS顺序以确保它们处于拓扑顺序-相同的错误
  3. 在我的action.py中使用了它:

    尝试:

    clientObj = ClientInfo.objects.all()[:1].get()
    

    除了ClientInfo.DoesNotExist:

    clientObj = None
    

编辑:释放action.py的一部分:

from django import forms, template
from django.contrib import admin
from django.contrib.admin import helpers
from django.shortcuts import render_to_response
from django.utils.encoding import force_unicode
from guardian.shortcuts import assign_perm
from django.utils.translation import ugettext as _

from models import ClientInfo
from customauth.models import ZenatixUser


class SelectUserForm(forms.Form):
    _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
    try:
        clientObj = ClientInfo.objects.all()[:1].get()
    except ClientInfo.DoesNotExist:
        clientObj = None
    if clientObj:
        client = clientObj.corp
        client_name = client.shortName
        client_id = client.cID
        userList = ZenatixUser.objects.filter(corp__cID=client_id)
        user = forms.ModelMultipleChoiceField(userList, label=client_name + ' users ')


def grant_read_permission(modeladmin, request, queryset):

使固定

class SelectUserForm(forms.Form):
    _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)

    def __init__(self, initial, *args, **kwargs):
        super(SelectUserForm, self).__init__(*args, **kwargs)
        try:
            clientObj = ClientInfo.objects.all()[:1].get()
            client = clientObj.corp
            client_name = client.shortName
            client_id = client.cID
            userList = ZenatixUser.objects.filter(corp__cID=client_id)
            #user = forms.ModelMultipleChoiceField(userList, label=client_name + ' users ')
            self.fields['user'] = forms.ModelMultipleChoiceField(userList, label=client_name + ' users ')
            self._selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
        except ClientInfo.DoesNotExist:
            raise Exception('Please add a client info object to the client')
布鲁诺·德斯胡里尔斯

在发布actions.py模块的源代码之前,这通常是一个疯狂的猜测,但是从追溯开始,我认为第16行位于SelectUserForm类主体的顶层如果是这样,此语句将在每次导入模块时执行,由于许多原因,这是BadThing。恭喜,您刚刚发现了这些原因之一。另一个是,此操作将在每个进程中执行一次,并且每个进程仅执行一次,一旦您投入生产,就会导致奇怪的错误(陈旧状态,从一个进程到另一个进程的不一致状态等)。

解决的办法是在您的表单方法中移动此语句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误integerField django模型syncdb

来自分类Dev

Django模型字段类型在syncDB时重新定义错误

来自分类Dev

Django:模型之间的引用

来自分类Dev

Django syncdb:访问被拒绝

来自分类Dev

Django:在保存之前修改模型的字段

来自分类Dev

Django - 在保存之前处理模型数据

来自分类Dev

django模型与保存之前的两个模型相关

来自分类Dev

澄清django syncdb --all选项

来自分类Dev

Django DiscoverRunner未运行syncdb

来自分类Dev

澄清django syncdb --all选项

来自分类Dev

Django模型:存储对未知类的引用

来自分类Dev

django模型的对象引用-缺少“对象”

来自分类Dev

如何编写自引用Django模型?

来自分类Dev

Django自引用多对多模型

来自分类Dev

Django模型引用其他类的对象

来自分类Dev

在 Django 模型方法中引用 ManyToMany 字段

来自分类Dev

Django 1.6.5中的Syncdb命令不会在models.py中创建新的模型类-说表已经存在

来自分类Dev

syncdb不会为嵌套模型创建表

来自分类Dev

syncdb不会为嵌套模型创建表

来自分类Dev

Django-在保存模型之前检查一些字段

来自分类Dev

Django:在保存之前将模型对象分配为ForeignKey

来自分类Dev

DJANGO-赋值之前引用的局部变量“ form”

来自分类Dev

赋值之前引用的局部变量 django 错误

来自分类Dev

使用MySQL在Django上的syncdb错误

来自分类Dev

Django manage.py syncdb错误

来自分类Dev

通过类的ManytoMany字段的Django syncdb

来自分类Dev

Django python manage.py syncdb

来自分类Dev

在Django中运行syncdb时获取异常

来自分类Dev

Django 1.7.3-字段引用的模型查找失败