首页 > 解决方案 > django 一对一关系删除用户模型

问题描述

class EngrRegModel(models.Model):
   engineer = models.OneToOneField(User, on_delete=models.CASCADE)
   skills_description = models.TextField()
   reg_date = models.DateTimeField(default=timezone.now)

   def __str__(self):
    return f'Engineer {self.engineer.username}'

我创建了这个 EngrRegModel,它的一个字段与 Django 用户模型具有一对一的关系,问题是每当删除 EngrRegModel 的实例时,用户也会被删除,我希望它是一种单向街道实现,这样当用户被删除时,EngrRegModel 的实例被删除,但是当 EngrRegModel 的实例被删除时,用户不应该被删除。我该如何解决?

    @login_required
    def engineerDeleteView(request):
       engineer_instance = EngrRegModel.objects.all().filter(engineer = 
          request.user)[0].engineer
       username = request.user
       if engineer_instance == request.user and request.method == 'POST':
          engineer_instance.delete()
           messages.success(request, f'{username}, You Are No Longer A Sky 
            Squad Engineer')
            return redirect('profile')
       else:
           print("NO")
           messages.warning(
                request, f'{username}, You Do Not Have Access To This!!!')
       return redirect('profile')

这是处理删除功能的视图

标签: djangodjango-models

解决方案


问题来自固定视图:

    @login_required
    def engineerDeleteView(request):
        engineer_instance = EngrRegModel.objects.all().filter(engineer = 
            request.user)[0]
        username = request.user

        if engineer_instance.engineer == request.user and request.method == 'POST':
            engineer_instance.delete()
            messages.success(request, f'{username}, You Are No Longer A Sky Squad 
             Engineer')
           return redirect('profile')
        else:
          print("NO")
          messages.warning(
            request, f'{username}, You Do Not Have Access To This!!!')
       return redirect('profile')

推荐阅读