美好的一天,我有一個模型物件,其中包含創建它的用戶,以及在表單中指定的用戶。
使用 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)
網址.py
path('delete/<int:title_id>/', views.title_delete),
視圖.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 的用戶 == 洗掉模型' 'else = 如果用戶不是所有者,請轉到 example.com 并且不要洗掉模型'
我們可以通過 request.user 獲取請求 url 的用戶,現在我們只需要檢查 request.user 是否等于模型的所有者。如何?
(順便說一句,如果有更好的方法可以為每個模型創建自定義 ID,或者您注意到我的代碼可能會更好的其他內容,請告訴我)
謝謝你的幫助 :-)
uj5u.com熱心網友回復:
正如您所提到的,如果物件是由當前登錄的用戶創建的,您只想洗掉標題物件。
這是實作它的方法
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/417817.html
標籤:
