在syncdb之后,Django模型没有显示在DB中

时间:2012-05-31 15:28:37

标签: django model syncdb

我有一个模型文件夹,其中包含已存在于数据库中的文件中的一些模型。我刚刚添加了另一个文件/模型,但是当我运行syncdb时它没有被添加到数据库中。我已经尝试过manage.py验证,它运行正常。我也运行了代码,它只在尝试使用“表不存在”保存时失败。

原始结构是这样的:
/型号
- __ init __ .py
- file1.py
- file2.py

__ init __ .py看起来像:

from file1 import File1Model
from file2 import File2Model

我添加了file3.py
    /型号
     - __ init __ .py
     - file1.py
     - file2.py
     - file3.py

并修改 __ init __ .py

from file1 import File1Model
from file2 import File2Model
from file3 import File3Model

file3的内容(名称可能已被更改以保护无辜,但除此之外的确切文件):
更新:刚刚尝试添加主键,因为id字段可能一直在搞乱自动添加的整数主键ID。还尝试了一些变化,但没有骰子。

from django.db import models
from django.contrib.auth.models import User


class File3Model(models.Model):
    user = models.OneToOneField(User)
    token = models.CharField(max_length=255, blank=False, null=False)
    id = models.CharField(primary_key=True, max_length=255)

    class Admin:
        pass

    class Meta:
        app_label = 'coolabel'

    def __unicode__(self):
        return self.user.username

    @staticmethod
    def getinstance(user, token, id):
        try:
            instance = File3Model.objects.get(pk=id)
            if instance.token != token:
                instance.token = token
                instance.save()
            return instance
        except:
            pass
        instance = File3Model()
        instance.user = user
        instance.token = token
        instance.id = id
        instance.save()
        return instance

因此,在此示例中,File1Model和File2Model已经在数据库中,并在syncdb之后保留在数据库中。但是,即使重新运行syncdb,也不会添加File3Model。有没有办法弄清楚为什么没有添加新模型?

4 个答案:

答案 0 :(得分:9)

如果在models.py之外定义模型,则必须在模型app_label类上设置Meta属性。

修改:app_label必须引用INSTALLED_APPS设置中的应用。它可能应该与models目录所在的app的名称相匹配,除非你有充分的理由不这样做。这似乎是你的问题。

class File3Model(models.Model):
    foo = models.CharField(...)
    ...

    class Meta:
        app_label = "my_app"

请注意,syncdb永远不会从db中删除任何表。在用目录结构替换models.py之前,可能使用syncdb创建了其他表。

答案 1 :(得分:1)

将app_label设置为我的应用解决了我的问题。

答案 2 :(得分:0)

为什么要拆分模型和模型文件夹而不是在models.py中放置模型?

在我自己的项目中,models.py中有大约10个模型,我很好。

您也可以尝试manage.py syncdb --all

我认为最好将所有模型保存在一个文件中并像from my_app.models import model_name一样导入它们,而不是记住将必要的模型导入models/__init__.py。顺便说一句,你可以避免许多问题和长线导入,而不关心some_model文件中models/*.py的位置。

谢谢,

苏丹

答案 3 :(得分:0)

BOOM!

我为新模型使用了不同的app_label,但在整个模型组中它必须是相同的。

其他型号标签是" mediocrelabel"我的新模特有了标签" coolabel"。我将新模型的标签改为" mediocrelabel"现在正确地将它们添加到数据库中。

感谢您的帮助,伙计们!