簡體   English   中英

IntegrityError: (1451, '無法刪除或更新父行:外鍵約束失敗 (..))

[英]IntegrityError: (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (..))

使用 schedule_files 刪除用戶時,我得到了這個:

IntegrityError在/管理/認證/用戶/ 166 /刪除/(1451, '不能刪除或更新父行,外鍵約束失敗( vacationvacations_schedulefile ,約束vacations_schedulefile_user_id_e85fa52f_fk_auth_user_id外鍵( user_id )參考auth_userid ))')

我的模型是:

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)

並且

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)

而 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)

但它返回 'NoneType' 對象沒有屬性 'delete'。 我怎樣才能做對? 謝謝你的幫助。

您不能刪除 ScheduleFile,因為 VacationEvent 需要它的主鍵,因此您必須在 ScheduleFile 模型之前刪除 VacationEvent 記錄,這可以通過信號或覆蓋 ScheduleFile 模型上的刪除功能以多種方式完成

例子:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM