Как я могу исправить '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 , да, ошибки отступов связаны с копированием-вставкой. Однако, вот трассировка:

Вернуться на верх