2017-04-18 60 views
1

我越來越瘋狂。Django - Python 3 - 「AssertionError:模型不能有多個AutoField。」

我創建了數據庫MySQLWorkbench

This his my Schema

比我所使用的終端命令來獲取型號代碼:

$python3 manage.py inspectie 

代碼傳遞給我的models.py我嘗試後使用殼體中的型號與

$ python3 manage.py shell

但後來我發現了總是這個錯誤:

"AssertionError: A model can't have more than one AutoField."

但錯誤是沒有意義的,因爲在每一個模型都只有一個下拉列表AutoField,請參閱:

class Brands(models.Model): 
    bid = models.AutoField(db_column='BID') # Field name made lowercase. 
    name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase. 
    fair = models.IntegerField(db_column='Fair', blank=True, null=True) # Field name made lowercase. 
    eco = models.IntegerField(db_column='Eco', blank=True, null=True) # Field name made lowercase. 
    country = models.CharField(db_column='Country', max_length=45, blank=True, null=True) # Field name made lowercase. 
    companies = models.ForeignKey('Companies', models.DO_NOTHING, db_column='Companies_ID') # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'Brands' 
     unique_together = (('bid', 'companies'),) 


class Companies(models.Model): 
    cid = models.AutoField(db_column='CID') # Field name made lowercase. 
    name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase. 
    fair = models.IntegerField(db_column='Fair', blank=True, null=True) # Field name made lowercase. 
    eco = models.IntegerField(db_column='Eco', blank=True, null=True) # Field name made lowercase. 
    country = models.CharField(db_column='Country', max_length=45, blank=True, null=True) # Field name made lowercase. 
    concerns = models.ForeignKey('Concerns', models.DO_NOTHING, db_column='Concerns_ID') # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'Companies' 
     unique_together = (('cid', 'concerns'),) 


class Concerns(models.Model): 
    cid = models.AutoField(db_column='CID', primary_key=True) # Field name made lowercase. 
    name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase. 
    fair = models.IntegerField(blank=True, null=True) 
    eco = models.IntegerField(db_column='Eco', blank=True, null=True) # Field name made lowercase. 
    country = models.CharField(db_column='Country', max_length=45, blank=True, null=True) # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'Concerns' 


class Products(models.Model): 
    pid = models.AutoField(db_column='PID') # Field name made lowercase. 
    name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase. 
    ean = models.IntegerField(db_column='EAN', blank=True, null=True) # Field name made lowercase. 
    fair = models.IntegerField(db_column='Fair', blank=True, null=True) # Field name made lowercase. 
    eco = models.IntegerField(db_column='Eco', blank=True, null=True) # Field name made lowercase. 
    companies_id = models.IntegerField(db_column='Companies_ID') # Field name made lowercase. 
    brands = models.ForeignKey(Brands, models.DO_NOTHING, db_column='Brands_ID') # Field name made lowercase. 
    brands_companies = models.ForeignKey(Brands, models.DO_NOTHING, db_column='Brands_Companies_ID') # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'Products' 
     unique_together = (('pid', 'companies_id', 'brands', 'brands_companies'),) 


class ProductsHasShoppinglists(models.Model): 
    products = models.ForeignKey(Products, models.DO_NOTHING, db_column='Products_ID') # Field name made lowercase. 
    products_companies = models.ForeignKey(Products, models.DO_NOTHING, db_column='Products_Companies_ID') # Field name made lowercase. 
    shoppinglists = models.ForeignKey('Shoppinglists', models.DO_NOTHING, db_column='ShoppingLists_ID') # Field name made lowercase. 
    shoppinglists_users = models.ForeignKey('Shoppinglists', models.DO_NOTHING, db_column='ShoppingLists_Users_ID') # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'Products_has_ShoppingLists' 
     unique_together = (('products', 'products_companies', 'shoppinglists', 'shoppinglists_users'),) 


class Shoppinglists(models.Model): 
    id = models.AutoField(db_column='ID') # Field name made lowercase. 
    products = models.CharField(db_column='Products', max_length=45, blank=True, null=True) # Field name made lowercase. 
    users = models.ForeignKey('Users', models.DO_NOTHING, db_column='Users_ID') # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'ShoppingLists' 
     unique_together = (('id', 'users'),) 


class Users(models.Model): 
    uid = models.AutoField(db_column='UID', primary_key=True) # Field name made lowercase. 
    firstname = models.CharField(db_column='FirstName', max_length=45, blank=True, null=True) # Field name made lowercase. 
    lastname = models.CharField(db_column='LastName', max_length=45, blank=True, null=True) # Field name made lowercase. 
    email = models.CharField(db_column='Email', max_length=45, blank=True, null=True) # Field name made lowercase. 

    class Meta: 
     managed = False 
     db_table = 'Users' 

我只是不瞭解問題!

回答

3

docs

By default, Django gives each model the following field:

id = models.AutoField(primary_key=True)

This is an auto-incrementing primary key.

If you’d like to specify a custom primary key, just specify primary_key=True on one of your fields. If Django sees you’ve explicitly set Field.primary_key, it won’t add the automatic id column.

Each model requires exactly one field to have primary_key=True (either explicitly declared or automatically added).

所以嘗試設置primary_key=True這樣的:

bid = models.AutoField(db_column='BID', primary_key=True) 
+0

我的問題是,我並沒有意識到,自動添加列也是一個下拉列表AutoField。感謝您的報價和提示和提示等等! – Anthony