Python 3.x /admin/auth/user/11/delete/FOREIGN KEY约束处的IntegrityError失败
当我从我的管理面板中删除用户时,它会显示给定的错误,我不知道这个错误的原因是什么,或者我在哪里出错。我可以更新和创建新用户,并删除那些没有配置文件的用户,但由于以下原因无法删除这些用户的配置文件。 accounts/models.pyPython 3.x /admin/auth/user/11/delete/FOREIGN KEY约束处的IntegrityError失败,python-3.x,django,django-models,django-forms,django-views,Python 3.x,Django,Django Models,Django Forms,Django Views,当我从我的管理面板中删除用户时,它会显示给定的错误,我不知道这个错误的原因是什么,或者我在哪里出错。我可以更新和创建新用户,并删除那些没有配置文件的用户,但由于以下原因无法删除这些用户的配置文件。 accounts/models.py from django.urls import reverse from django.db import models from django.contrib import auth from PIL import Image from django.db.m
from django.urls import reverse
from django.db import models
from django.contrib import auth
from PIL import Image
from django.db.models.signals import post_save
from django.dispatch import receiver
# Create your models here.
class User(auth.models.User,auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
class Profile(models.Model):
user = models.OneToOneField(auth.models.User, on_delete=models.CASCADE)
avatar = models.ImageField(default='1.jpg', upload_to='displays', height_field=None, width_field=None, max_length=None)
def __str__(self):
return f'{self.user.username} Profile'
def save(self,*args, **kwargs):
super(Profile,self).save(*args, **kwargs) #it will take data and save it
dp = Image.open(self.avatar.path) #storing avatar in variable
if dp.height >300 or dp.width >300:
output_size =(300,300) #set any size you want
dp.thumbnail(output_size)
dp.save(self.avatar.path) #after resizing it save it in data base in place of uploaded once by user
def get_absolute_url(self):
return reverse("Profile_detail", kwargs={"pk": self.pk})
@receiver(post_save, sender=User)
def create_profile(sender, created,instance,**kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance,**kwargs):
instance.profile.save()
accounts/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.core.exceptions import ValidationError
from django.core import validators
User = get_user_model()
class UserCreateForm(UserCreationForm):
class Meta:
fields = ["username","email","password1","password2"]
model = get_user_model()
widgets ={
'username' : forms.TextInput(attrs={'class':'textinputclass','placeholder':'username'}),
}
def clean_email(self):
email = self.cleaned_data["email"]
if User.objects.filter(email__iexact=email).exists():
raise forms.ValidationError("Email is invalid")
return email
def __init__(self,*args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].label = 'Display Name'
# self.fields['email'].label = 'Email Address'
accounts/views.py
user = User
class SignUp(CreateView):
form_class = forms.UserCreateForm
def form_valid(self, form):
if form.is_valid:
email = form.cleaned_data.get('email')
user = form.save(commit=False)
user.is_active = False
send_mail(
'i gotch you',
'how are uou',
'coolahmed21@hgmail.com',
[email],
fail_silently=False,
)
return super(SignUp, self).form_valid(form)
success_url = reverse_lazy('login')
template_name = "accounts/signup.html"
这是由于on_delete=级联。这意味着如果ForeignKey引用的对象被删除,那么它也应该删除引用的对象。这样的级联会导致大量对象被删除,因为对象的删除实际上会触发其他删除,以此类推 试试这个:
class Profile(models.Model):
user = models.OneToOneField(auth.models.User, null=True on_delete=models.SET_NULL)
这是由于on_delete=级联。这意味着如果ForeignKey引用的对象被删除,那么它也应该删除引用的对象。这样的级联会导致大量对象被删除,因为对象的删除实际上会触发其他删除,以此类推 试试这个:
class Profile(models.Model):
user = models.OneToOneField(auth.models.User, null=True on_delete=models.SET_NULL)