如何让syncdb db_table和app_label很好地协同工作

时间:2010-09-23 01:13:48

标签: django django-models

我有一个看起来像这样的模型:

class HeiselFoo(models.Model):
    title = models.CharField(max_length=250)

    class Meta:
        """ Meta """
        app_label = "Foos"
        db_table = u"medley_heiselfoo_heiselfoo"

每当我运行我的测试套件时,我都会收到错误,因为Django没有为该模型创建表。

它似乎是app_label和db_table之间的交互 ​​- 因为如果设置了db_table,测试套件会正常运行,但app_label不会。

以下是完整源代码的链接:http://github.com/cmheisel/heiselfoo

以下是测试套件的追溯:

E
======================================================================
ERROR: test_truth (heiselfoo.tests.HeiselFooTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/heiselfoo/tests.py", line 10, in test_truth
    f.save()
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/models/base.py", line 434, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/models/base.py", line 527, in save_base
    result = manager._insert(values, return_id=update_pk, using=using)
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/models/manager.py", line 195, in _insert
    return insert_query(self.model, values, **kwargs)
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/models/query.py", line 1479, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 783, in execute_sql
    cursor = super(SQLInsertCompiler, self).execute_sql(None)
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 727, in execute_sql
    cursor.execute(sql, params)
  File "/Users/chris/Code/heiselfoo/ve/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py", line 200, in execute
    return Database.Cursor.execute(self, query, params)
DatabaseError: no such table: medley_heiselfoo_heiselfoo

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (errors=1)
Creating test database 'default'...
No fixtures found.
medley_heiselfoo_heiselfoo
Destroying test database 'default'...

3 个答案:

答案 0 :(得分:3)

好吧,我是个白痴。您需要在INSTALLED_APPS中拥有与app_label匹配的应用,否则您的表格将无法创建。

答案 1 :(得分:2)

  

您需要在INSTALLED_APPS中拥有与app_label匹配的应用,否则您的表格将无法创建。

在我的情况下它不起作用 - 当我在app_label上更改INSTALLED_APPS中的应用程序名称时,匹配模型元设置,但与app文件夹名称不同, manage.py syncdb raise:“错误:没有名为......的模块。“在模型Meta中使用app_label和db_table时,我仍然不知道如何将模型与数据库同步。

答案 2 :(得分:0)

警告:这不是你问题的直接答案。

通过查看github中的代码,我发现您已在models.py中定义了模型。然而,您已在模型的app_label中定义了Meta。这样做是否有理由?

Django的documentation表示app_label意图使用

  

如果模型存在于标准models.py之外(例如,如果应用程序的模型位于myapp.models的子模块中),则模型必须定义它所属的应用程序:

鉴于此,我认为没有理由在您的案例中定义app_label。因此我的问题。也许你最好没有定义app_label