Django:没有这样的表

时间:2018-01-14 17:14:19

标签: python django

我在尝试扩展用户模型时遇到错误。我创建了一个模型,它接收了一些我希望附加到用户的字段,如下所示:

账户/ models.py

class Customer(models.Model):
    US_STATES_OR_CAN_PROVINCES = (
        ('AK', 'Alaska'),
        ('AL', 'Alabama'),
        ('AR', 'Arkansas'),
        ('AS', 'American Samoa'),
        ('AZ', 'Arizona'),
        ('CA', 'California'),
        ('CO', 'Colorado'),
        ('CT', 'Connecticut'),
        ('DC', 'District of Columbia'),
        ('DE', 'Delaware'),
        ('FL', 'Florida'),
        ('GA', 'Georgia'),
        ('GU', 'Guam'),
        ('HI', 'Hawaii'),
        ('IA', 'Iowa'),
        ('ID', 'Idaho'),
        ('IL', 'Illinois'),
        ('IN', 'Indiana'),
        ('KS', 'Kansas'),
        ('KY', 'Kentucky'),
        ('LA', 'Louisiana'),
        ('MA', 'Massachusetts'),
        ('MD', 'Maryland'),
        ('ME', 'Maine'),
        ('MI', 'Michigan'),
        ('MN', 'Minnesota'),
        ('MO', 'Missouri'),
        ('MP', 'Northern Mariana Islands'),
        ('MS', 'Mississippi'),
        ('MT', 'Montana'),
        ('NA', 'National'),
        ('NC', 'North Carolina'),
        ('ND', 'North Dakota'),
        ('NE', 'Nebraska'),
        ('NH', 'New Hampshire'),
        ('NJ', 'New Jersey'),
        ('NM', 'New Mexico'),
        ('NV', 'Nevada'),
        ('NY', 'New York'),
        ('OH', 'Ohio'),
        ('OK', 'Oklahoma'),
        ('OR', 'Oregon'),
        ('PA', 'Pennsylvania'),
        ('PR', 'Puerto Rico'),
        ('RI', 'Rhode Island'),
        ('SC', 'South Carolina'),
        ('SD', 'South Dakota'),
        ('TN', 'Tennessee'),
        ('TX', 'Texas'),
        ('UT', 'Utah'),
        ('VA', 'Virginia'),
        ('VI', 'Virgin Islands'),
        ('VT', 'Vermont'),
        ('WA', 'Washington'),
        ('WI', 'Wisconsin'),
        ('WV', 'West Virginia'),
        ('WY', 'Wyoming'),
        ('AB', 'Alberta'),
        ('BC','British Columbia'),
        ('MB', 'Manitoba'),
        ('NB', 'New Brunswick'),
        ('NL', 'Newfoundland and Labrador'),
        ('NT', 'Northwest Territories'),
        ('NS', 'Nova Scotia'),
        ('NU', 'Nunavut'),
        ('ON', 'Ontario'),
        ('PE', 'Prince Edward Island'),
        ('QC', 'Quebec'),
        ('SK', 'Saskatchewan'),
        ('YT', 'Yukon')
    )
    COUNTRIES = (
        ('USA', 'United States'),
        ('CAN', 'Canada')
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    company_name = models.CharField(max_length=100, blank=True)
    company_website = models.CharField(max_length=100, blank=True)
    company_phone = models.CharField(max_length=10, blank=True)
    company_address = models.CharField(max_length=100, blank=False)
    company_city = models.CharField(max_length=255, blank=False)
    company_state = models.CharField(max_length=2,
                                            choices=US_STATES_OR_CAN_PROVINCES)
    company_zipcode = models.CharField(max_length=5, blank=False)
    company_country =models.CharField(max_length=3, choices=COUNTRIES,
                                            blank=False)

然后我尝试在管理页面中访问这些新细节,如下所示:

账户/ admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from accounts.models import Customer
# Register your models here.

# Define an inline admin descriptor for Employee model
# which acts a bit like a singleton
class CustomerInline(admin.StackedInline):
    model = Customer
    can_delete = False
    verbose_name_plural = 'customers'

# Define a new User admin
class UserAdmin(BaseUserAdmin):
    inlines = (CustomerInline, )

# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

当我运行makemigrationsmigrate时,所有内容都可以正常迁移,但我的Customer模型无法在数据库中找到。我通过运行inspectdb进行了验证。

这是我的错误:

OperationalError at /admin/auth/user/1/change/
no such table: accounts_customer
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/auth/user/1/change/
Django Version: 2.0.1
Exception Type: OperationalError
Exception Value:    
no such table: accounts_customer

这看起来像django 101,但我不得不遗漏一些东西。

3 个答案:

答案 0 :(得分:1)

我怀疑您忘记将'accounts'添加到INSTALLED_APPS设置。

这意味着在您调用createmigrations时不会创建所需的迁移,因此在您调用migrate时不会运行。

答案 1 :(得分:0)

尝试专门针对该应用运行迁移,例如:

python manage.py makemigrations accounts
python manage.py migrate accounts

几天前我有一个特定的案例,其中应用程序中没有迁移文件夹,只有在明确说明应用程序名称后才能使用。

在任何情况下,如果运行上述命令时出现问题,您将能够提取有关问题的更多信息。

答案 2 :(得分:0)

您必须删除数据库,然后再次进行迁移迁移。 它对我有用