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

Col*_*ood 0 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)
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

Django V 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,它将为你创建数据库,一切都很好.谢谢您的帮助!

Pab*_*ruz 6

你不能这样做:

group_id = models.ForeignKey(Groups, db_column='id')
user_id = models.ForeignKey(Users, db_column='id')
Run Code Online (Sandbox Code Playgroud)

你只需要这样做:

group_id = models.ForeignKey(Groups)
user_id = models.ForeignKey(Users)
Run Code Online (Sandbox Code Playgroud)

Django会推断使用基于什么样的列UsersGroups主键.

当你在的话,我会建议你改变GroupsGroup,UsersUser等等,等等.您的代码将更加清晰,因为您将执行以下操作:

user = User()
Run Code Online (Sandbox Code Playgroud)

代替:

user = Users()
Run Code Online (Sandbox Code Playgroud)