У меня есть две модели в моей базе данных: модель «Учетная запись» (которая является пользовательской моделью пользователя) и модель «Возврат».
Моя база данных работала нормально вплоть до добавления «Возврата» 'модель, которая имеет отношение 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')
Еще раз спасибо, очень признателен.