如何修复外键约束失败时的'IntegrityError at /admin/orders/order/add/'?



我创建了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']

我怎么能解决它??


@ syedmuhammadawoudsheraz,是的,缩进错误与复制粘贴有关。但是,这是回溯:

Traceback (most recent call last):
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangodbbackendsbasebase.py", line 267, in _commit
return self.connection.commit()
sqlite3.IntegrityError: FOREIGN KEY constraint failed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangocorehandlersexception.py", line 55, in inner
response = get_response(request)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangocorehandlersbase.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangocontribadminoptions.py", line 683, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangoutilsdecorators.py", line 133, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangoviewsdecoratorscache.py", line 62, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangocontribadminsites.py", line 242, in inner
return view(request, *args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangocontribadminoptions.py", line 1885, in add_view
return self.changeform_view(request, None, form_url, extra_context)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangoutilsdecorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangoutilsdecorators.py", line 133, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangocontribadminoptions.py", line 1745, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangodbtransaction.py", line 255, in __exit__
connection.commit()
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangoutilsasyncio.py", line 26, in inner
return func(*args, **kwargs)
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangodbbackendsbasebase.py", line 291, in commit
self._commit()
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangodbbackendsbasebase.py", line 267, in _commit
return self.connection.commit()
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangodbutils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:UsersMylaptopDesktoppizza_deliverymy_venvlibsite-packagesdjangodbbackendsbasebase.py", line 267, in _commit
return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed

@Nnaobi我已经在单独的应用程序中创建了用户类,我命名为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}" ```

在你的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()

相关内容

最新更新