【问题标题】:Django and DB error "Column 'id' specified twice"Django 和 DB 错误“列 'id' 指定了两次”
【发布时间】:2011-04-05 20:01:21
【问题描述】:

我是 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 异常类型:数据库错误 异常值:

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

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

【问题讨论】:

  • 不需要 [SOLVED] 前缀。用户可以通过问题旁边数字的颜色来查看您是否接受了答案。

标签: python mysql django


【解决方案1】:

你不能这样做:

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

【讨论】:

  • 可能有助于添加如何明确指定目标列
  • 我试图这样做,但我收到一个错误,抱怨它找不到 group_id_id,所以我不得不使用 db_column 来使它工作。
  • Django 是否为您生成了表格?
  • 不,我制作了我不知道 django 可以做到的表格。但是我得到了这个异常值:(1054,“'字段列表'中的未知列'group_id_id'”)
  • 如果您制作了表格,那么您需要向 DJANGO 提供列名。您的用户模型主键是什么? DJANGO 文档非常好。所以你可能想在继续之前阅读一些关于模型(以及 Django 如何处理它们)的信息......
【解决方案2】:
group = models.ForeignKey(Groups, db_column='group_id')
user = models.ForeignKey(Users, db_column='user_id')

【讨论】:

    【解决方案3】:

    您正在为group_iduser_id 指定db_column='id'。您不能有两个具有相同名称的列。你可以去掉这个参数,让 Django 为你处理命名。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 2020-07-13
        • 1970-01-01
        相关资源
        最近更新 更多