Django和数据库错误“列'id'重复指定”

0 投票
4 回答
2950 浏览
提问于 2025-04-16 15:09

我刚开始学习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版本:1.3,Python版本:2.4,Mysql版本:5.0.77

请求方式:POST
请求网址:http://somehost:8100/admin/users_admin/group_map/add/
Django版本:1.3
异常类型:数据库错误
异常信息:

(1110, "列'id'被指定了两次")

学到的经验:如果是新数据库,不用自己手动创建表,只需运行 python manage.py syncdb,它会为你自动创建数据库,一切就会正常。谢谢大家的帮助!

4 个回答

0

你为 group_iduser_id 都指定了 db_column='id'。但是你不能有两个名字一样的列。你可以去掉这个参数,让Django自己来处理命名。

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的方式解释清楚。

7

你不能这样做:

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

撰写回答