Административная панель Django не может добавлять записи в таблицу - PullRequest
1 голос
/ 13 марта 2019

В моей админ-панели Django всякий раз, когда я хочу добавить несколько записей в таблицу, я получаю эту ошибку:

IntegrityError в / admin / pool / orders / add /

(1452, «Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (projectname. orders, CONSTRAINT orders_ibfk_3 FOREIGN KEY (user_phone)» ССЫЛКИ users (phone) ВКЛЮЧЕНО УДАЛИТЬ НЕТ ДЕЙСТВИЯНА ОБНОВЛЕНИИ НЕТ ДЕЙСТВИЙ) ')

Вот мои модели:

class Orders(models.Model):
    objects = jmodels.jManager()
    product = models.ForeignKey('Products', models.DO_NOTHING)
    user_phone = models.ForeignKey('Users', models.DO_NOTHING, db_column='user_phone')
    order_date = jmodels.jDateField()
    status = models.CharField(max_length=11)
    price = models.CharField(max_length=11)
    count = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'Orders'
        verbose_name_plural = "user orders"

    def __str__(self):
        return '%s------- (%s)' % (self.user_phone,self.status)


class Users(models.Model):
    objects = jmodels.jManager()
    phone = models.CharField(unique=True, max_length=11)
    name = models.CharField(max_length=80)
    family = models.CharField(max_length=80)
    nationalcode = models.CharField(max_length=11, blank=True, null=True)
    city = models.CharField(max_length=80, blank=True, null=True)
    address = models.TextField(blank=True, null=True)
    profilepic = models.TextField(blank=True, null=True)
    profiletext = models.TextField(blank=True, null=True)
    bons = models.CharField(max_length=11, blank=True, null=True)
    charge = models.CharField(max_length=11, blank=True, null=True)
    registerdate = jmodels.jDateField()
    status = models.CharField(max_length=11, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Users'
        verbose_name_plural = "Users"

    def __str__(self):
        return '%s %s ---- (%s)' % (self.name,self.family,self.phone)

Дополнительно: Наряду с этим у меня есть еще одна проблема.Дело в том, что у меня 150 записей в таблице заказов, но я не вижу их в админ панели Django, вместо этого просто отображается количество.

1 Ответ

1 голос
/ 13 марта 2019

Ваша ошибка может быть вызвана несоответствием в STORAGE_ENGIENE. Я думаю, что есть несколько таблиц INNODB и несколько таблиц MyISAM. Попробуйте преобразовать их в согласованный тип.

Далее, если это не ошибка, то это происходит из-за прямых ссылок в вашей базе данных. Если это является причиной, вы можете отключить проверку внешнего ключа, отредактировав настройки Django следующим образом:

DATABASES = {
    'default': {
                ...         
               'OPTIONS': {
                         "init_command": "SET foreign_key_checks = 0;",
                },
       }
}

Для более подробной информации, вы можете обратиться к этому сообщению: Django "Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется"

EDIT:

Чтобы получить значение phone в поле user_phone, вам необходимо использовать ForeignKey.to_field в вашей модели Orders как:

user_phone = models.ForeignKey('Users', to_field='phone')

Это необходимо, поскольку Django использует первичный ключ модели User для хранения значения в user_phone модели Orders. Использование вышеупомянутого скрипта помогает получить значение поля, которое вы хотите, в поле внешнего ключа.

При этом необходимо убедиться, что в поле phone модели User установлено unique=True.

Проверьте эту ссылку на официальную документацию Django to_field

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