Django 3.0.3 Сбой ограничения IntegrityError FOREIGN KEY при внесении изменений в БД - PullRequest
0 голосов
/ 03 мая 2020

У меня есть две модели в моей базе данных: модель «Учетная запись» (которая является пользовательской моделью пользователя) и модель «Возврат».

Моя база данных работала нормально вплоть до добавления «Возврата» 'модель, которая имеет отношение ForeignKey к модели' User ', которая, как я подозреваю, вызывает проблему. (Каждое возвращение принадлежит существующему пользователю. В панели администратора окно параметров заполняется существующими пользователями, поэтому я подумал, что это работает правильно?)

Оцените любую помощь с этим!

Ошибка :

IntegrityError в / admin / return / return / add /

Не удалось выполнить ограничение FOREIGN KEY

Метод запроса: URL запроса POST: http://127.0.0.1: 8000 / admin / return / return / add / Django Версия: 3.0.3 Тип исключения: IntegrityError Значение исключения:

Сбой ограничения FOREIGN KEY

Вот мой models.py для приложения Return. :

from django.db import models

from django.contrib.auth import get_user_model
User = get_user_model()

# Create your models here.
class Return(models.Model):
    user = models.ForeignKey(User, related_name="returns", on_delete=models.PROTECT)
    created_at = models.DateTimeField(auto_now=True)
    last_edited = models.DateTimeField(null=True)

    TAX_YEAR_CHOICES = [
    ('2019', '2019'),
    ('2020', '2020'),
    ('2021', '2021'),
    ]

    tax_year_ending = models.CharField(
        choices=TAX_YEAR_CHOICES,
        max_length=4,
        blank=False,
        null=False,
    )

    RETURN_STATUS_CHOICES = [
    ('1', 'In progress'),
    ('2', 'Completed, awaiting review'),
    ('3', 'Completed, under review'),
    ('4', 'Completed, awaiting client action'),
    ('5', 'Submitted to HMRC'),
    ]

    return_status = models.CharField(
        choices=RETURN_STATUS_CHOICES,
        max_length=1,
        default=1,
        blank=False,
        null=False,
    )

Вот мой пользовательский класс пользователя (также настроенный в файле settings.py):

class Account(AbstractBaseUser):
    email = models.EmailField(verbose_name='email', max_length=60, unique=True) # tells Django this is the unique ID

    #following required for the AbstractBaseUser class
    date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    #tell django we want to use email as our username field (for logins)
    USERNAME_FIELD = 'email'

    #tells Django to user AccountManager
    objects = AccountManager()

    #tell django which fields are required on registration:
    #REQUIRED_FIELDS = []

    #what to return when we print the Account object
    def __str__(self):
        return self.email

#following required for AbstractBaseUser class
    #does the user have permissions, yes if is_admin
    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

Вот информация о запросе поста из журнала ошибок: user

'3'

last_edited_0

'2020-05-03'

last_edited_1

'13: 01: 23 '

tax_year_ending

'2019'

return_status

'3'

_addanother

'Сохранить и добавить еще один' * 104 8 *

(я подтвердил, что есть пользователь с pk '3')

Еще раз спасибо, очень признателен.

1 Ответ

0 голосов
/ 03 мая 2020

Вам необходимо записать экземпляр пользователя от имени номера ПК:

User.objects.get(pk=3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...