当我从我的管理面板中删除用户时,它显示给我错误我不明白这个错误的原因是什么或者我在哪里犯了错误。我可以更新和创建新用户并删除那些没有个人资料的用户,但由于我在下面给出的以下原因,拥有个人资料的用户无法删除。
账户/模型.py
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()
账户/表格.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'
账户/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',
'[email protected]',
[email],
fail_silently=False,
)
return super(SignUp, self).form_valid(form)
success_url = reverse_lazy('login')
template_name = "accounts/signup.html"
这是由于 on_delete=CASCADE 。这意味着如果 ForeignKey 引用的对象被删除,那么它也应该删除引用对象。这样的级联因此会导致大量对象被删除,因为对象的删除实际上会触发其他删除,等等。
试试这个:
class Profile(models.Model):
user = models.OneToOneField(auth.models.User, null=True on_delete=models.SET_NULL)
您需要将 post_save、post_delete 更改为 pre_save 和 pre_delete,它会正常工作