- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近将一个项目从 1.8.11 升级到 1.9,在 1.8 上一切正常,我已经处理了弃用警告并清理了项目中的很多内容。
当我尝试运行该项目时,出现错误
ValueError: Cannot create form field for 'country' yet, because its related model 'Country' has not been
loaded yet
我已经尝试解决这个问题几个小时了,非常感谢一些帮助
我查看了 Django 网站上的升级说明,升级了一些依赖项,修复了一两个警告,但仍然没有修复问题。
User = settings.AUTH_USER_MODEL
class Country(TimeStampedModel):
name = models.CharField(max_length=50, unique=True)
code = models.CharField(max_length=2, null=True, blank=True, db_index=True)
code3 = models.CharField(max_length=3, null=True, blank=True, unique=True)
last_updated_by = models.ForeignKey(User, null=True, blank=True, related_name='%(class)s_last_updated_by')
created_by = models.ForeignKey(User, default=settings.SYSTEM_USER_ID, related_name='%(class)s_created_by')
objects = models.Manager()
countries = CountryManager()
class Meta:
verbose_name = _('country')
verbose_name_plural = _('countries')
ordering = ['name']
def __str__(self):
return self.name
class AddressAbstractModel(TimeStampedModel):
country = models.ForeignKey('Country', verbose_name=_('country'), null=True, blank=True)
address_1 = models.CharField(_('street address line 1'), max_length=50, blank=True)
address_2 = models.CharField(_('street address line 2'), max_length=50, blank=True)
city = models.CharField(_('city'), max_length=50, blank=True)
postal_code = models.CharField(_('postal code'), max_length=20, blank=True)
latitude = models.DecimalField(_('Latitude'), max_digits=9, decimal_places=6, null=True, blank=True)
longitude = models.DecimalField(_('Longitude'), max_digits=9, decimal_places=6, null=True, blank=True)
class Meta:
abstract = True
表格
User = get_user_model()
class UserChangeForm(forms.UserChangeForm):
class Meta:
model = User
fields = '__all__'
help_texts = {
'username': _('Required. Letters, digits and @/./+/-/_ only.')
}
class UserCreationForm(forms.UserCreationForm):
class Meta:
model = User
fields = ("username",)
help_texts = {
'username': _('Required. Letters, digits and @/./+/-/_ only.')
}
编辑:请求完整回溯
web_1_1b9067fcd9a4 | Traceback (most recent call last):
web_1_1b9067fcd9a4 | File "manage.py", line 10, in <module>
web_1_1b9067fcd9a4 | execute_from_command_line(sys.argv)
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 350, in execute_
from_command_line
web_1_1b9067fcd9a4 | utility.execute()
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 324, in execute
web_1_1b9067fcd9a4 | django.setup()
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/__init__.py", line 18, in setup
web_1_1b9067fcd9a4 | apps.populate(settings.INSTALLED_APPS)
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/apps/registry.py", line 115, in populate
web_1_1b9067fcd9a4 | app_config.ready()
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/contrib/admin/apps.py", line 22, in ready
web_1_1b9067fcd9a4 | self.module.autodiscover()
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/contrib/admin/__init__.py", line 26, in autodiscove
r
web_1_1b9067fcd9a4 | autodiscover_modules('admin', register_to=site)
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/utils/module_loading.py", line 50, in autodiscover_
modules
web_1_1b9067fcd9a4 | import_module('%s.%s' % (app_config.name, module_to_search))
web_1_1b9067fcd9a4 | File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
web_1_1b9067fcd9a4 | return _bootstrap._gcd_import(name[level:], package, level)
web_1_1b9067fcd9a4 | File "<frozen importlib._bootstrap>", line 994, in _gcd_import
web_1_1b9067fcd9a4 | File "<frozen importlib._bootstrap>", line 971, in _find_and_load
web_1_1b9067fcd9a4 | File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
web_1_1b9067fcd9a4 | File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
web_1_1b9067fcd9a4 | File "<frozen importlib._bootstrap_external>", line 678, in exec_module
web_1_1b9067fcd9a4 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
web_1_1b9067fcd9a4 | File "winda/users/admin.py", line 11, in <module>
web_1_1b9067fcd9a4 | from .forms import UserChangeForm, UserCreationForm
web_1_1b9067fcd9a4 | File "winda/users/forms.py", line 5, in <module>
web_1_1b9067fcd9a4 | class UserChangeForm(forms.UserChangeForm):
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/forms/models.py", line 247, in __new__
web_1_1b9067fcd9a4 | opts.field_classes)
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/forms/models.py", line 172, in fields_for_model
web_1_1b9067fcd9a4 | formfield = f.formfield(**kwargs)
web_1_1b9067fcd9a4 | File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related.py", line 937, in formfiel
d
web_1_1b9067fcd9a4 | (self.name, self.remote_field.model))
web_1_1b9067fcd9a4 | ValueError: Cannot create form field for 'country' yet, because its related model 'Country' has not been
loaded yet
已安装的应用
DJANGO_APPS = (
# Default Django apps:
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Useful template tags:
# 'django.contrib.humanize',
# Admin
'django.contrib.admin',
'django.contrib.flatpages',
)
THIRD_PARTY_APPS = (
'widget_tweaks',
'storages',
'reversion',
'django_ses',
'timezone_field',
'ckeditor',
'ckeditor_uploader',
'rest_framework',
'rest_framework.authtoken',
'solo',
'phonenumber_field',
'allauth',
)
# Apps specific for this project go here.
LOCAL_APPS = (
# Your stuff: custom apps go here
'core',
'users',
'common',
'registration',
'trainings',
'courses',
'delegate',
'organization',
'database_admin',
'database_super_admin',
'orders',
'api',
)
用户模态
class User(AbstractBaseUser, PermissionsMixin, UserProfileAbstract):
UNKNOWN, BOUNCE, COMPLAINT, DELIVERY = 'Unknown', 'Bounce', 'Complaint', 'Delivery'
EMAIL_STATUS_CHOICE = (
(UNKNOWN, 'Unknown'),
(BOUNCE, 'Bounce'),
(COMPLAINT, 'Complaint'),
(DELIVERY, 'Delivery')
)
delegate_id = models.CharField(_('delegate id'), unique=True, max_length=12, null=True, default=None, db_index=True)
expires_at = models.DateTimeField(_('expires at'), default=TimeStampedModel.user_expires_at_default)
email_status = models.CharField(_('email status'), max_length=10, choices=EMAIL_STATUS_CHOICE)
role = models.CharField(_('role'), max_length=30, choices=UserProfileAbstract.ROLE_CHOICE, db_index=True)
company_name = models.CharField(_('company name'), max_length=50, blank=True)
last_updated_by = models.ForeignKey('self', default=settings.SYSTEM_USER_ID, null=True, related_name='%(class)s_last_updated_by')
created_by = models.ForeignKey('self', default=settings.SYSTEM_USER_ID, null=True, related_name='%(class)s_created_by')
archived_by = models.ForeignKey('self', null=True, related_name='%(class)s_archived_by', blank=True)
can_upload = models.BooleanField(_('can upload files'), default=False)
can_buy_credit = models.BooleanField(_('can buy credits'), default=False)
can_use_credit = models.BooleanField(_('can use credits'), default=False)
can_ask_revoke = models.BooleanField(_('can ask to request certificate revokes'), default=False)
is_tp_site_access = models.BooleanField(_('Access to all TP site profiles'), default=False)
api_rate_limit = models.IntegerField(_('daily API request limit'), default=settings.API_CALL_RATE_LIMIT, blank=True)
is_api_enabled = models.BooleanField(_('API enabled'), default=False, blank=True)
username = models.CharField(_('username'), max_length=255, unique=True,
help_text=_('Required. 255 characters or fewer. Letters, digits and '
'@/./+/-/_ only.'),
validators=[
validators.RegexValidator(r'^[\w.@+-]+$',
_('Enter a valid username. '
'This value may contain only letters, numbers '
'and @/./+/-/_ characters.'), 'invalid'),
],
error_messages={
'unique': _("A user with that username already exists."),
})
first_name = models.CharField(_('first name(s)'), max_length=100, blank=False)
last_name = models.CharField(_('surname'), max_length=100, blank=False)
email = models.EmailField(_('email address'), blank=False, max_length=255)
is_staff = models.BooleanField(_('staff status'), default=False,
help_text=_('Designates whether the user can log into this admin '
'site.'))
is_active = models.BooleanField(_('active'), default=True,
help_text=_('Designates whether this user should be treated as '
'active. Unselect this instead of deleting accounts.'))
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = WindaUserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
def __str__(self):
return self.username
class UserProfileAbstract(AddressAbstractModel):
archived_from = models.DateTimeField(_('archived from'), default=TimeStampedModel.archived_from_default)
archived_at = models.DateTimeField(_('archived at'), null=True, blank=True)
job_title = models.CharField(_('job title'), max_length=50, blank=True)
organization_name = models.CharField(_('organisation name'), max_length=200, blank=True)
training_provider = models.ForeignKey(TrainingProvider, verbose_name=_('training provider'), null=True, blank=True,
related_name='%(class)s_users')
phone = models.CharField(_('work phone number'), max_length=15, blank=True)
timezone = TimeZoneField(default='Europe/London')
class Meta:
abstract = True
最佳答案
您遇到了问题 #25858 。当 users.User
模型使用 AddressAbstractModel
时,'Country'
解析为 users.Country
,这不会不存在。
您可以通过在抽象模型的外键中使用 common.Country
来解决该问题。
请参阅 foreign key docs 中的示例了解更多信息。
关于python - 从 Django 1.8 升级到 1.9 时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867059/
我对 Python-Django 和 web 开发还很陌生,我被困在这个使用 POST 创建新资源的特殊问题上。 我正在为 REST API 使用 Django REST 框架,我正在尝试创建一个新资
我已经使用 Django-storages 成功地将 Word 文档存储到 S3。 class Document(TitleSlugDescriptionModel, TimeStampedModel
我有 2 个关于模型代理的问题, 如何从模型对象创建代理对象? 如何从模型查询集创建代理查询集? 例如,假设我们定义了: from django.contrib.auth.models import
我想编写一个直接执行 HTTP 请求的单元测试(而不是使用 django.test.client.Client)。 如果您好奇为什么 - 那是因为我想测试我从 Django 应用程序公开的 Thrif
我为我的个人网站启动了一个 django 项目来学习 django。到目前为止,我已经将我的开发环境设置为我需要的一切,并遵循 this很棒的教程来创建一些基本的数据结构和模板。现在我想开始使用我之前
我已经阅读了很多关于如何在使用 Django 注册时添加额外字段的信息,例如 here 、 here 和 here 。代码片段是: forms.py(来自注册应用程序) class Registrat
我正在编写小型社交应用程序。功能之一是在网站标题中写入用户名。因此,例如,如果我登录并且我的名字是Oleg(用户名),那么我应该看到: Hello, Oleg | Click to edit prof
我有一个使用 Django 和 Django Rest 框架开发的应用程序。我想将 django-reversion 功能添加到我的应用程序中。 我已经尝试过http://django-reversi
我有一个简单的 HTML 表单,我没有使用 Django 表单,但现在我想添加一个选择。 选择最容易创建为 Django ChoiceField (与通过循环等手动创建选择相反),但是,如果没有在 D
我不明白为什么人们以两种方式编写外键,这样做的目的是什么?它们是相同还是不同? 我注意到有些人这样写: author = models.ForeignKey(Author, on_delete=mod
我想在我的 Django 应用程序中获取评论最多的十个帖子,但我做不到,因为我想不出合适的方法。 我目前正在使用 django 评论框架,并且我已经看到使用 aggregate or annotate
这对于 Django 1.2 仍然有效吗? Custom Filter in Django Admin on Django 1.3 or below 我已经尝试过,但管理类中的 list_filter
问题在于,当 django-compressor 编译为 .js 文件的 CoffeeScript 文件中引用 {{ STATIC_URL }} 时,它无法正确加载。 在我的 django 模板中,我
我正在尝试将一些字段从一个 django 模型移动到一个新模型。假设我有一个书籍模型: class Book(models.Model): title = models.CharField(max
我想在我的 Django 应用程序中获取评论最多的十个帖子,但我做不到,因为我想不出合适的方法。 我目前正在使用 django 评论框架,并且我已经看到使用 aggregate or annotate
目前我正在寻找在 Django 中实现访问控制。我已经阅读了有关内置权限的内容,但它并不关心每个对象的基础。例如,我想要“只有创建者可以删除自己的项目”之类的权限。所以我读到了 django-guar
嗨,我正在将我的 Django 模型的一个字段的值设置为其他模型的另一个字段的值。这个值应该是动态变化的。 这是我的第一个模型 class MainModel(AbstractBaseUser, Pe
我正在尝试为我的模型创建一个编辑表单。我没有使用模型表单,因为根据模型类型,用户可以使用不同的表单。 (例如,其中一个表单有 Tinymce 小部件,而另一个没有。) 有没有什么方法可以使用模型设置表
Django 模板中的搜索字段 如何在类似于此图像的 Django 模板中创建搜索字段 http://asciicasts.com/system/photos/1204/original/E354I0
根据 Django documentation ,如果 Django 安装激活了 AuthenticationMiddleware,HttpRequest 对象有一个“user”属性代表当前登录的用户
我是一名优秀的程序员,十分优秀!