为什么不在数据库中创建表?

时间:2014-05-20 09:40:05

标签: python django

请帮助解决问题。

我创建了一个带有相关字段的模型(foreignkey)。但我不能在数据库中创建一个表。

模特:

class Status(models.Model):     
    status = models.CharField(
        max_length=40, 
        blank=False,
    )                   


class Gender(models.Model):     
    gender = models.CharField(
        max_length=10, 
        blank=False,
    )   


class UserProfile(User):            
    nickname = models.CharField(
        'Отображаемое имя',
        max_length=30, 
        blank=False,
    )
    gender = models.ForeignKey(
        Gender,
        verbose_name='Пол',
        blank=True,
        null=True,
        #default=Gender.objects.get(pk=1),
    )
    status = models.ForeignKey(
        Status,
        verbose_name='Статус',
        blank=True,
        null=True,
        #default=Status.objects.get(pk=1),
    )

问题是在运行控制台命令之后:

python manage.py syncdb

我收到以下错误消息:

    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: drummersaransk_userprofile

initial_data.json:

[       

    {
        "model": "drummersaransk.Status",
        "pk": 1,
        "fields": {
            "status": "Барабанный бог"
        }
    },
    {
        "model": "drummersaransk.Status",
        "pk": 2,
        "fields": {
            "status": "Профессиональный барабанщик"
        }
    },  
    {
        "model": "drummersaransk.Status",
        "pk": 3,
        "fields": {
            "status": "Барабанщик"
        }
    },  
    {
        "model": "drummersaransk.Status",
        "pk": 4,
        "fields": {
            "status": "Барабанщик в прошлом"
        }
    },  
    {
        "model": "drummersaransk.Status",
        "pk": 5,
        "fields": {
            "status": "Играю на другом инструменте, но барабанщик в душе"
        }
    },  
    {
        "model": "drummersaransk.Status",
        "pk": 6,
        "fields": {
            "status": "Сочувствующий"
        }
    },      


    {
        "model": "drummersaransk.Gender",
        "pk": 1,
        "fields": {
            "gender": "Ж"
        }
    },
    {
        "model": "drummersaransk.Gender",
        "pk": 2,
        "fields": {
            "gender": "М"
        }
    }   
]

命令python manage.py test UserProfile输出:ImportError:

  

没有名为'UserProfile'的模块

3 个答案:

答案 0 :(得分:0)

这里有bug:

class UserProfile(User):            
    nickname = models.CharField(
    'Отображаемое имя', #bug, is it verbose_name?
    max_length=30, 
    blank=False,
)

修正:

class UserProfile(User):            
    nickname = models.CharField(
    verbose_name='Отображаемое имя',
    max_length=30, 
    blank=False,
)

答案 1 :(得分:0)

Django' syncdb命令永远不会执行会破坏数据的SQL;由于创建和编辑外键就是这样一种操作,因此不能使用syncdb

如果删除表格,syncdb将重新创建它们。

如果您使用的是django 1.7,则可以使用database migrations,或者使用south为django版本提供迁移< 1.7

正如您现在正在开发的那样,简单地删除数据库并重新开始可能更容易。

另请注意,如果您在代码中使用除latin-1之外的任何内容,则需要define your file encoding,并且您仍然使用Python版本2.

答案 2 :(得分:0)

尝试删除数据库,然后再次创建并使用syncdb

或使用南迁移

python manage.py schemamigration UserProfile --auto