Ошибка Django и БД: «ID столбца указан дважды» - PullRequest
0 голосов
/ 06 апреля 2011

Я новичок в 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 URL запроса: http://somehost:8100/admin/users_admin/group_map/add/ Джанго версия: 1.3 Тип исключения: DatabaseError Значение исключения:

(1110, «Идентификатор столбца указан дважды»)

Извлеченный урок: если новая база данных не требует самостоятельного создания таблиц, просто запустите python manage.py syncdb, и он создаст для вас базу данных, и все хорошо. Спасибо за помощь!

Ответы [ 4 ]

6 голосов
/ 06 апреля 2011

Вы не можете сделать это:

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 определит, какой столбец использовать на основе Users и Groups первичных ключей.

Пока вы занимаетесь этим, я бы рекомендовал вам поменять Groups на Group, Users на User и так далее, и так далее. Ваш код будет более понятным, так как вы будете делать такие вещи, как:

user = User()

Вместо:

user = Users()
0 голосов
/ 24 ноября 2017
group = models.ForeignKey(Groups, db_column='group_id')
user = models.ForeignKey(Users, db_column='user_id')
0 голосов
/ 06 апреля 2011

db_column указывает имя столбца для использования в модели, которую вы определяете, а не указанную.Не нужно указывать имена столбцов для FK, это делается автоматически.

0 голосов
/ 06 апреля 2011

Вы указываете db_column='id' как для group_id, так и для user_id. Вы не можете иметь два столбца с одинаковым именем. Вы можете удалить этот параметр и позволить Django позаботиться о присвоении имен для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...