【问题标题】:Django AttributeError: 'Alias' object has no attribute 'urls'Django AttributeError:“别名”对象没有属性“urls”
【发布时间】:2016-11-27 20:04:36
【问题描述】:

我刚刚完成了我的英雄应用程序模型的编写:

这是我的 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)

我在 Installed Apps 下调整了我的 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 上查看了其他类似的问题,但我不明白如何解决它。

【问题讨论】:

  • Alias 模型是否有 ForeignKeyStatus ,如果是。你想在管理员中创建内联吗?
  • register 的第二个参数应该是ModelAdmin 的子类,而不是Model 的子类!
  • 我不太明白你在说什么,schwobaseggl。您指的是 Admin.py 文件吗?第二个参数是哪个?

标签: python django django-models migration


【解决方案1】:

我终于在 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([Hero, Stats, Team, Status, Alias])
【解决方案2】:

你应该改变

admin.site.register(Status, Alias)

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

这个模型应该通过单独的行添加到管理中。

【讨论】:

    【解决方案3】:

    注册函数将类列表作为其第一个参数

    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] )
    

    【讨论】:

      【解决方案4】:

      (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 参数并被这样处理,直到最终在某个地方出现错误。

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

      【讨论】:

        猜你喜欢
        • 2016-07-14
        • 2018-12-21
        • 2017-01-30
        • 2016-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-22
        • 2018-02-11
        相关资源
        最近更新 更多