Как я могу исправить 'IntegrityError at /admin/orders/order/add/', когда ограничение FOREIGN KEY не сработало?
Я создал модель заказа для Django rest API, и когда я попытался добавить заказ, я получил ошибку:
django.db.utils.IntegrityError: FOREIGN KEY constraint failed
Вот содержимое models.py :
from django.contrib.auth import get_user_model
User= get_user_model()
class Order(models.Model):
SIZES= (('SMALL','small'), ('MEDIUM','medium'), ('LARGE','large'))
ORDER_STATUS= (('PENDING','pending'),('IN TRANSIT','in transit'),('DELIVERED','delivered'))
customer= models.ForeignKey(User, on_delete = models.CASCADE, null = True, db_constraint=False)
size= models.CharField(max_length=20, choices=SIZES, default=SIZES[0][0])
order_status= models.CharField(max_length=20, choices=ORDER_STATUS, default=ORDER_STATUS[0][0])
quantity=models.IntegerField(default=1)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
def __str__(self):
return f"<Order {self.size} by {self.customer.id}"
и admin.py :
from django.contrib import admin
from .models import Order
@admin.register(Order)
#admin.site.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display=['size','order_status','quantity','created_at']
как я могу это исправить?
В вашем models.py
from django.contrib.auth.models import User
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, db_constraint=False
...
Вы получаете ошибку, потому что у вас нет предопределенной модели пользователя, и вы вызываете get_user_model()
@Nnaobi Я уже создал класс User в отдельном приложении, которое я назвал authentication и вот код его models.py :
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import gettext_lazy as _
from phonenumber_field.modelfields import PhoneNumberField
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
if not email:
raise ValueError(_("An Email should be provided"))
email= self.normalize_email(email)
new_user= self.model(email=email, **extra_fields)
new_user.set_password(password)
new_user.save()
return new_user
def create_superuser():
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_("Superuser should have is_staff as True "))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_("Superuser should have is_superuser as True"))
if extra_fields.get('is_active') is not True:
raise ValueError(_("Superuser should have is_active as True"))
class User(AbstractUser):
username=models.CharField(max_length=25, unique=True)
email=models.EmailField(max_length=80, unique=True)
phone_number=PhoneNumberField(null=False, unique=True)
USERNAME_FIELD='email'
REQUIRED_FIELDS=['username', 'phone_number']
objects= CustomUserManager()
def __str__(self):
return f"<user {self.email}" ```
@SyedMuhammadDawoudSheraz , да, ошибки отступов связаны с копированием-вставкой. Однако, вот трассировка: