【问题标题】:Error in a class when trying to syncDB (Python Django)尝试同步数据库时类中的错误(Python Django)
【发布时间】:2015-03-07 16:41:56
【问题描述】:

我在尝试通过命令行同步数据库时遇到错误。

我的目标是一个具有特定条件的基本音乐搜索/删除/更新/添加应用程序,我正在使用 Python 和 Django。

我要写的类:

from django.db import models

# music search
class musicsearch(models.Model):
    id = models.IntegerField
    title = models.CharField(max_length=40)
    artist = models.CharField(max_length=40)
    genre = models.CharField(max_length=20)

错误回溯:

C:\Users\jodie\Desktop\NtokloMH>python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python34\lib\site-packages\django\core\management\__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "C:\Python34\lib\site-packages\django\core\management\__init__.py", line 354, in execute
    django.setup()
  File "C:\Python34\lib\site-packages\django\__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Python34\lib\site-packages\django\apps\registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "C:\Python34\lib\site-packages\django\apps\config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Python34\lib\importlib\__init__.py", line 109, in 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:\Users\jodie\Desktop\NtokloMH\musicsearch\models.py", line 4, in <module>
    class musicsearch(models.Model):
  File "C:\Python34\lib\site-packages\django\db\models\base.py", line 168, in __new__
    new_class.add_to_class(obj_name, obj)
  File "C:\Python34\lib\site-packages\django\db\models\base.py", line 297, in add_to_class
    value.contribute_to_class(cls, name)
TypeError: contribute_to_class() missing 1 required positional argument: 'name'

【问题讨论】:

  • 嗨 Martijn 感谢您对 Stackoverflow 方式的提醒:) 请查看修改后的内容!

标签: python django class


【解决方案1】:

我发现您的模型存在两个问题。

您没有创建IntegerField 的实例;你需要调用它:

id = models.IntegerField()
#                       ^^

您正在为其他字段创建 元组,因为您以逗号结束每个字段:

title = models.CharField(max_length=40),
#                                      ^

删除那些逗号。

您实际上不必指定自己的id 字段;默认情况下,模型会自动给定一个 id 字段。请参阅 Django 模型文档中的 Automatic primary fields

默认情况下,Django 为每个模型提供以下字段:

id = models.AutoField(primary_key=True)

这是一个自动递增的主键。

由于您指定了自己的id 字段使用primary_key=True,因此您的模型可能也会遇到问题。

【讨论】:

  • 我删除了它们,但我仍然得到同样的东西(实际上,当我遇到第一个错误以为我错过了它们时,我试图把它们放在那里
  • 谢谢,已经处理了原来的错误,又创建了一个新错误,错误:musicsearch.musicsearch: (models.E004) 'id' 只能用作字段名,如果该字段也设置'primary_key = True'。 C:\Users\jodie\Desktop\NtokloMH>
  • @akseone:我的回答已经涵盖了这一点。只需删除整个id 行,您不需要它。
  • Martijn 非常感谢您!我还不能给你代表,但我一定会回来的
【解决方案2】:

您的 id 整数字段缺少两个 ()。

id = models.IntegerField()

【讨论】:

    【解决方案3】:

    缺少下面一行代码

    id = models.IntegerField(primary_key= True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多