【问题标题】:Getting error while trying to delete a model object in django尝试在 django 中删除模型对象时出错
【发布时间】:2019-07-07 02:36:10
【问题描述】:

def employee_delete(request, id=None):
    user = get_object_or_404(User, id=id)
    #user = User.objects.get(id=id)
    if request.method == 'POST':
        print(type(user))
        self.user.delete()
        return HttpResponseRedirect(reverse('employee_list'))
    else:
        context = {}
        context['user'] = user
        return render(request, 'employee/delete.html', context)

在 django 2.1.5 中使用 delete() 删除对象时显示错误

【问题讨论】:

  • 不要粘贴部分错误页面的屏幕截图,而是单击该页面上显示“切换到复制和粘贴视图”的链接并将错误文本粘贴到此处。
  • 显示您的模型。我认为那里有问题。
  • @DanielRoseman 文件 "F:\Pycharm\ems\ems\employee\views.py" 在 employee_delete 59. 文件 "F:\Pycharm\ems\venv\lib\site-packages\django\ db\models\base.py" 在删除 879.collector.collect([self], keep_parents=keep_parents) 文件 "F:\Pycharm\ems\venv\lib\site-packages\django\db\models\deletion.py " in collect 221. field.remote_field.on_delete(self, field, sub_objs, self.using) 异常类型:TypeError at /employee/4/delete/ 异常值:'str' 对象不可调用 user.delete()跨度>
  • 我正在使用 django 的内置用户模型
  • @ManzurulHoqueRumi Profile(models.Model): user = models.OneToOneField(User, on_delete="CASCADE") designation = models.CharField(max_length=20, null=False, blank=False) 薪水= models.IntegerField(null=True, blank=True) class Meta: ordering = ('-salary',) def __str__(self): return "{0}{1}".format(self.user.first_name, self .user.last_name) @receiver(post_save, sender=User) def user_created(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) else: instance.profile.save()

标签: python django django-models sqlite django-views


【解决方案1】:

您正在创建基于函数的视图。所以不要使用self

def employee_delete(request, id=None):
    user = get_object_or_404(User, id=id)
    #user = User.objects.get(id=id)
    if request.method == 'POST':
        print(type(user))
        user.delete() # change here
        return HttpResponseRedirect(reverse('employee_list'))
    else:
        context = {}
        context['user'] = user
        return render(request, 'employee/delete.html', context)

更新

在您的models.py 中,您使用的是字符串 CASCADE

user = models.OneToOneField(User, on_delete=models.CASCADE) # update like this

【讨论】:

  • 这是真的,但不是 OP 出现错误的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 2020-02-14
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多