2011-04-05 28 views
0

我是新來的Django和我有一些問題,當我嘗試保存一個映射。Django和數據庫錯誤「列」ID「指定兩次」

from django.db import models 

# Create your models here. 
class Users(models.Model): 
     user = models.CharField(max_length=45) 
     password = models.CharField(max_length=125) 
     env = models.CharField(max_length=10) 
     class Meta: 
       db_table = 'esp-users' 
     def __unicode__(self): 
       return unicode(self.user) 
class Groups(models.Model): 
     group_name = models.CharField(max_length=45) 
     description = models.CharField(max_length=255) 
     env = models.CharField(max_length=45) 
     class Meta: 
       db_table = 'esp-groups' 
     def __unicode__(self): 
       return unicode(self.group_name) 
class Roles(models.Model): 
     role_name = models.CharField(max_length=45) 
     env = models.CharField(max_length=10) 
     class Meta: 
       db_table = 'esp-roles' 
     def __unicode__(self): 
       return unicode(self.role_name) 
class Group_Map(models.Model): 
     group_id = models.ForeignKey(Groups, db_column='id') 
     user_id = models.ForeignKey(Users, db_column='id') 
     class Meta: 
       db_table='esp-group-map' 
     def __unicode__(self): 
       return unicode(self.group_id) 
class Role_Map(models.Model): 
     role_id = models.ForeignKey(Roles, db_column='id') 
     group_id = models.ForeignKey(Groups, db_column='id') 
     class Meta: 
       db_table='esp-role-map' 
     def __unicode__(self): 
       return unicode(self.role_id) 

感謝您的幫助。

Django的1.3版本的Python 2.4中,MySQL 5.0.77

請求方法:POST 請求URL:http://somehost:8100/admin/users_admin/group_map/add/ Django的版本:1.3 異常類型:DatabaseError 異常值:

(1110,「列'id'指定兩次「)

經驗教訓:如果它的一個新數據庫不是自己創建表,而是運行python manage.py syncdb,它會爲你創建數據庫並且都是好的。謝謝您的幫助!

+0

[已解決]前綴是不必要的。用戶可以通過問題旁邊數字的顏色查看您是否接受了答案。 – MAK 2011-04-05 20:27:20

回答

5

你不能做到這一點:

group_id = models.ForeignKey(Groups, db_column='id') 
user_id = models.ForeignKey(Users, db_column='id') 

你只需要做:

group_id = models.ForeignKey(Groups) 
user_id = models.ForeignKey(Users) 

Django會推斷使用基於UsersGroups主鍵列是什麼。

當你在這裏時,我會建議你將Groups改成Group,Users改成User等等,等等。您的代碼會更清楚,因爲你會做這樣的東西:

user = User() 

相反的:

user = Users() 
+0

可能有助於添加如何明確指定目標列 – Claudiu 2011-04-05 20:06:33

+0

我試圖做到這一點,我得到了一個錯誤,抱怨說它找不到group_id_id,所以我不得不使用db_column使它工作。 – 2011-04-05 20:11:18

+0

Django是否爲您生成表格? – 2011-04-05 20:12:12

0

您指定db_column='id'兩個group_iduser_id。你不能有兩個同名的列。你可以刪除這個參數並讓Django爲你處理命名。

0

db_column指定要在您定義的模型中使用的列名稱,而不是指定的名稱。沒有必要爲FK指定列名,它會自動完成。

0
group = models.ForeignKey(Groups, db_column='group_id') 
user = models.ForeignKey(Users, db_column='user_id')