[英]IntegrityError: (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (..))
when deleting users with schedule_files I got this:使用 schedule_files 删除用户时,我得到了这个:
IntegrityError at /admin/auth/user/166/delete/ (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (
vacation
.vacations_schedulefile
, CONSTRAINTvacations_schedulefile_user_id_e85fa52f_fk_auth_user_id
FOREIGN KEY (user_id
) REFERENCESauth_user
(id
))')IntegrityError在/管理/认证/用户/ 166 /删除/(1451, '不能删除或更新父行,外键约束失败(
vacation
。vacations_schedulefile
,约束vacations_schedulefile_user_id_e85fa52f_fk_auth_user_id
外键(user_id
)参考auth_user
(id
))')
My models are:我的模型是:
class ScheduleFile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
added = models.DateTimeField(default=django.utils.timezone.now)
def __str__(self):
return '[User ID: {}] {}'.format(str(self.user.id), self.user.username)
And并且
class VacationEvent(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
schedule_type = models.CharField(choices=SCHEDULE_TYPES, default=STRICT_TIME, max_length=3)
exclude_fba_from_chatzos = models.BooleanField(default=False)
schedule_file = models.ForeignKey(ScheduleFile, on_delete=models.CASCADE, null=True)
status = models.CharField(verbose_name="status event", choices=EVENT_STATUSES, max_length=3, default=CREATED)
And User(AbstractUser) I decided to create pre_delete signal and delete relative objects of schedule model:而 User(AbstractUser) 我决定创建 pre_delete 信号并删除调度模型的相关对象:
@receiver(pre_delete, dispatch_uid='User')
def user_del(sender, instance, **kwargs):
i = instance
events = VacationEvent.objects.filter(user_id=166)
schedule = prefetch_related_objects(events, 'schedule_file__user')
schedule.delete()
# instance.user.schedulefile_set.clear()
# qs = VacationEvent.objects.filter(user_id=166).prefetch_related_('schedule_file')
# qs.delete()
# b = ScheduleFile.objects.filter(user_id=166)
# e = VacationEvent.objects.filter(user_id=166)
# e.schedule_file.remove(b)
But it returns 'NoneType' object has no attribute 'delete'.但它返回 'NoneType' 对象没有属性 'delete'。 How can I do it right?
我怎样才能做对? Thanks for any help.
谢谢你的帮助。
you can not delete ScheduleFile because it's primary key is required by VacationEvent so you have to delete VacationEvent record before the ScheduleFile model this can be done in several way by signal or overriding delete function on ScheduleFile model您不能删除 ScheduleFile,因为 VacationEvent 需要它的主键,因此您必须在 ScheduleFile 模型之前删除 VacationEvent 记录,这可以通过信号或覆盖 ScheduleFile 模型上的删除功能以多种方式完成
example:例子:
def delete(self, using=None):
if self.schedule_file:
self.schedule_file.delete()
super(ScheduleFile, self).delete(using)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.