繁体   English   中英

Django AttributeError: 'Alias' 对象没有属性 'urls'

[英]Django AttributeError: 'Alias' object has no attribute 'urls'

我刚刚为我的 Heroes 应用编写了我的模型:

这是我的 Heroes 应用程序的 models.py 文件:

从 django.db 导入模型

# Create your models here.
class Hero(models.Model):
    codename = models.CharField(max_length = 30)
    profilePic = models.ImageField(blank=True) #blank makes this optional

    def __str__(self):
        return (self.codename)

class Stats(models.Model):
    heroID = models.ForeignKey('Hero')
    height = models.CharField(max_length = 10)
    weight = models.CharField(max_length = 10)
    STATS_CHOICES = (
    ('1', 'Extremely Low'),
    ('2', 'Very Low'),
    ('3', 'Low'),
    ('4', 'Average'),
    ('5', 'Good'),
    ('6', 'Above Average'),
    ('7', 'High'),
    ('8', 'Very High'),
    ('9', 'Super Human'),
    ('10', 'Above and Beyond'))
    powers = models.CharField(max_length = 5, choices = STATS_CHOICES)
    intelligence = models.CharField(max_length = 5, choices = STATS_CHOICES)
    durability = models.CharField(max_length = 5, choices = STATS_CHOICES)
    strength = models.CharField(max_length = 5, choices = STATS_CHOICES)
    speed = models.CharField(max_length = 5, choices = STATS_CHOICES)

    def __str__(self):
        return (self.heroID)

class Team(models.Model):
    name = models.CharField(max_length = 25)
    leader = models.IntegerField
    address = models.TextField
    description = models.TextField
    members = models.TextField

class Status(models.Model):
    heroID = models.ForeignKey('Hero')
    missionID = models.IntegerField
    TeamID = models.IntegerField

    def __str__(self):
        return (self.heroID, self.missionID, self.TeamID)

class Alias(models.Model):
    heroID = models.ForeignKey('Hero')
    firstName = models.CharField(max_length = 25)
    surname = models.CharField(max_length = 25)
    formerCodeNames = models.TextField
    occupation = models.CharField(max_length = 30)
    address = models.TextField
    citizenship = models.CharField(max_length = 40)
    species = models.CharField(max_length = 40)

    def __str__(self):
        return (self.heroID, self.firstName, self.surname)

我在已安装的应用程序下调整了我的 settings.py 文件:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #custom apps
    'heroes',
]

然后我调整了我的 admin.py 文件:

from django.contrib import admin

# Register your models here.
from .models import Hero, Stats, Team, Status, Alias

admin.site.register(Hero, Stats)
admin.site.register(Team)
admin.site.register(Status, Alias)

在命令提示符中,我输入: python manage.py makemigrations 并且我收到此错误 - “AttributeError: 'Alias' object has no attribute 'urls'”:

(secondproject) C:\Python34\Scripts\secondproject\heroes4Hire>python manage.py
emigrations
aceback (most recent call last):
File "manage.py", line 22, in <module>
  execute_from_command_line(sys.argv)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\managem
\__init__.py", line 367, in execute_from_command_line
  utility.execute()
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\managem
\__init__.py", line 359, in execute
  self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\managem
\base.py", line 294, in run_from_argv
  self.execute(*args, **cmd_options)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\managem
\base.py", line 342, in execute
  self.check()
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\managem
\base.py", line 374, in check
  include_deployment_checks=include_deployment_checks,
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\managem
\base.py", line 361, in _run_checks
  return checks.run_checks(**kwargs)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\checks\
istry.py", line 81, in run_checks
  new_errors = check(app_configs=app_configs)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\checks\
s.py", line 14, in check_url_config
  return check_resolver(resolver)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\core\checks\
s.py", line 24, in check_resolver
  for pattern in resolver.url_patterns:
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\utils\functi
l.py", line 35, in __get__
  res = instance.__dict__[self.name] = self.func(instance)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\urls\resolve
py", line 313, in url_patterns
  patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\utils\functi
l.py", line 35, in __get__
  res = instance.__dict__[self.name] = self.func(instance)
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\urls\resolve
py", line 306, in urlconf_module
  return import_module(self.urlconf_name)
File "C:\Python34\Scripts\secondproject\lib\importlib\__init__.py", line 109,
 import_module
  return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "C:\Python34\Scripts\secondproject\heroes4Hire\heroes4Hire\urls.py", lin
0, in <module>
  url(r'^admin/', admin.site.urls),
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\contrib\admi
ites.py", line 267, in urls
  return self.get_urls(), 'admin', self.name
File "C:\Python34\Scripts\secondproject\lib\site-packages\django\contrib\admi
ites.py", line 251, in get_urls
  url(r'^%s/%s/' % (model._meta.app_label, model._meta.model_name), include(m
l_admin.urls)),
tributeError: 'Alias' object has no attribute 'urls'

这是什么意思,我该如何解决? 我在 StackOverFlow 上看过其他类似的问题,但我不明白如何解决它。

我终于在 codebar 的聚会上得到了答案!

model.p 中的每个类都需要位于 admin.py 上的单独一行中。

所以答案是:

from django.contrib import admin

# Register your models here.
from .models import Hero, Stats, Team, Status, Alias

admin.site.register(Hero)
admin.site.register(Stats)
admin.site.register(Team)
admin.site.register(Status)
admin.site.register(Alias)

你应该改变

admin.site.register(Status, Alias)

admin.site.register(Status)
admin.site.register(Alias)

此模型应通过单独的行添加到 admin 中。

register 函数将一个类列表作为它的第一个参数

from django.contrib import admin

# Register your models here.
from .models import Hero, Stats, Team, Status, Alias

admin.site.register( [Hero, Stats, Team, Status, Alias] )

(tl;dr:将模型放在列表中)

有同样的问题,在这里找到解决方案然后自己阅读代码并认为我会添加一些细节。

这是注册函数的定义(来自 django/contrib/admin/sites.py)。

def register(self, model_or_iterable, admin_class=None, **options):
   ...

它需要一个模型或一个可迭代对象,它做的第一件事是检查它是否有一个模型,如果有,把它放在一个列表中,然后在它上面运行主循环(第一行与那个无关):

admin_class = admin_class or ModelAdmin
if isinstance(model_or_iterable, ModelBase):
   model_or_iterable = [model_or_iterable]
for model in model_or_iterable:
   ...

当您将第二个模型放在不在列表中时,它会被传递给 admin_class 参数并被视为这样,直到最终在某处给出错误为止。

因此,您可以将所有模型放在一个列表中,而不是多次调用此函数。 我什至会用一个来做 - 无论如何,该函数都会这样做,所以你只是为了避免自己和其他人在以后遇到这个问题而编辑代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM