Django和DB错误“列'id'指定两次”

时间:2011-04-05 20:01:21

标签: python mysql django

我是django的新手,当我尝试保存映射时遇到了一些问题。

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 V 1.3,Python 2.4,Mysql 5.0.77

请求方法:POST 请求网址:http://somehost:8100/admin/users_admin/group_map/add/ Django版本:1.3 异常类型:DatabaseError 例外值:

(1110,“列'id'指定两次”)

经验教训:如果它是一个新的数据库而不是自己制作表只需运行python manage.py syncdb,那么它将为你创建数据库并且一切都很好。谢谢你的帮助!

4 个答案:

答案 0 :(得分:6)

你不能这样做:

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()

答案 1 :(得分:0)

您为db_column='id'group_id指定了user_id。您不能有两个具有相同名称的列。您可以删除此参数,让Django为您处理命名。

答案 2 :(得分:0)

db_column指定要在您定义的模型中使用的列名称,而不是引用的列名称。无需为FK指定列名,它是自动完成的。

答案 3 :(得分:0)

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