【问题标题】:how to check if user has permission to delete objects in django如何检查用户是否有权删除django中的对象
【发布时间】:2015-03-06 22:07:30
【问题描述】:

我正在尝试编写一个视图方法来响应 AJAX 请求以删除条目。我想在删除该条目之前检查最终用户是否是该条目的实际作者。我的“if”语句能做到这一点吗?

VIEWS.PY

latest_entries=Entry.objects.order_by('-pub_date')[:16]

@login_required
def delete_object(request):
   if request.is_ajax():
      object_name = request.POST.get('entryname')
      targetobject = Entry.objects.get(author=object_name)
      if request.user = targetobject.author:
         targetobject.delete() 
      return HttpResponseRedirect('/storefront/')

模型

Class Entry(models.Model):
    author = models.CharField(max_length=30)
    subject = models.CharField(max_length=30)
    description = models.CharField(max_length=30)

【问题讨论】:

  • 如果 request.user == targetobject.author: 使用 ==
  • 如果你在正确的道路上,你不能在问之前测试它吗?
  • 您的查询也正确吗? Entry.objects.get(author=object_name) 感觉不对。 (如果是,为什么不首先做if request.user == object_name::P)

标签: ajax django django-views


【解决方案1】:

你快到了。 request.userdjango.utils.SimpleLazyObject 的一个实例,因此您将无法将 request.user 与 CharField 进行 == 比较,其中的值是一个字符串。

您需要执行以下操作:

if request.user.username == targetobject.author:
    targetobject.delete()

或者只使用 User 对象中与 Entry.author 同义的任何字段。

【讨论】:

    【解决方案2】:

    我会说你的模型是错误的。 author 应该是 auth.User 模型的 ForeignKey。然后你的比较就可以工作了(更改为==),并且在按用户属性分组和查询方面还有其他好处。

    【讨论】:

    • 我只是仔细检查了一下,它实际上是 auth.User.model 的 ForeignKey。
    • 我现在无法测试这个,因为我不在我的工作机器上,但即使没有外键,我猜它应该可以工作。
    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 2013-12-09
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多