Django删除一个对象



天哪,我有一个Model对象,它包含创建它的用户,以及表单中指定的用户。

使用localhost:800/delete/int:title_id/删除一个对象。

问题:我如何才能确保用户也创建了对象可以删除它。

如果userXY拥有ID为123的对象,并且他调用localhost:800/delete/123,则该对象将被删除。

但是,如果OtherNutzerYX调用localhost:800/delete/123,则不会删除该对象,因为该对象不属于他,而是属于UserXY。

型号.py

class NewTitle(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
default=None,
null=True,
on_delete=models.CASCADE,
)
title = models.CharField(max_length=200)
creator_adress = models.GenericIPAddressField(null=True)
id = models.BigAutoField(primary_key=True)
def __str__(self):
return str(self.title)

urls.py

path('delete/<int:title_id>/', views.title_delete),

views.py

def title_view(request):
titles = NewTitle.objects.all()
custom_title_id = random.randint(1111, 1111111111111)
if request.method == 'POST':
form = NewTitleForm(request.POST, instance=NewTitle(user=request.user))
if form.is_valid():
obj = form.save(commit=False)
obj.creator_adress = get_client_ip(request)
obj.id = custom_title_id
while NewTitle.objects.filter(id=obj.id).exists():
obj.id = random.randint(111, 11111111111)
obj.save()
return redirect('/another')
else:
form = NewTitleForm()
return render(request, 'test.html', {'form': form, 'titles': titles})

def title_delete(request, title_id):
if #WHAT CODE HERE?:
NewTitle.objects.filter(id=title_id).delete()
else:
return redirect('https://example.com')
return HttpResponseRedirect('/another')

相关代码是title_delete函数。我不知道在if语句中该写什么。它有一些类似的内容:"如果标题的用户id==请求url的用户===删除模型"否则=如果用户不是所有者,请访问example.com,不要创建模型">

我们可以用request.user获取请求url的用户,现在我们只需要检查request.user是否等于模型的所有者。怎样

(顺便说一句,如果有更好的方法为每个模型创建自定义ID,或者你注意到我的代码还有其他更好的地方,请告诉我(

感谢您的帮助:-(

正如您所提到的,如果title对象是由当前登录的用户创建的,那么您只想删除该对象。

以下是如何实现

def title_delete(request, title_id):

user_title = NewTitle.objects.filter(id=title_id,
user=request.user)
if user_title:
user_title.delete()
else:
return redirect('https://example.com')
return HttpResponseRedirect('/another')

如果你确定你的用户群只有一个标题,你也可以在筛选后调用.first()

user_title = NewTitle.objects.filter(id=title_id,
user=request.user).first()

相关内容

最新更新