如何通過pk過濾刪除模型

Ace7python

我正在嘗試使用 pk 刪除整個模型,但是當我點擊“刪除”時,我被重定向到給定的頁面,但沒有任何反應模型仍然存在並且沒有被刪除,但是當我寫入“room_name”而不是“pk”時'它確實有效,(提前致謝)

*Views.py:
def delete_room(request, pk):
    Room.objects.filter(name=pk).delete()
    return redirect('home')

Urls.py:
    path("delete/<int:pk>/", views.delete_room, name="delete_room")

Models.py:
class Room(models.Model):
    name = models.CharField(max_length=100)
    about = models.TextField(max_length=500, null=True, blank=True)
    creator = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='room_creator')
    members = models.ManyToManyField(User, through="RoomMember")
    
    
class RoomMember(models.Model):
    approved = models.BooleanField(default=False, blank=False)
    room = models.ForeignKey(Room, related_name='memberships', on_delete=models.CASCADE)
    user = models.ForeignKey(User, related_name='user_groups', on_delete=models.CASCADE)
    
        
class Messages(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False)
    text = models.CharField(max_length=10000, blank=False, null=False)
    date = models.DateTimeField(default=datetime.now)
    room = models.ForeignKey(Room, null=True, blank=False, on_delete=models.CASCADE)

Html:
    <a class="btn btn-danger" href="{% url 'delete_room' pk=room.pk %}">Delete Room</a>*
威廉·範·翁塞姆

您可以過濾pk項目的主鍵,因此:

def delete_room(request, pk):
    Room.objects.filter(pk=pk).delete()
    return redirect('home')

但是,你應該不是一個GET請求做到這一點。刪除項目應通過 POST 請求或 DELETE 請求完成。正如 W3 組織所說

特別是,已經建立了約定,即GET 和 HEAD 方法不應具有執行除檢索以外的操作的意義這些方法應該被認為是“安全的”

如果您接受 GET 請求,搜索引擎和一些已經檢索頁面鏈接的瀏覽器可能會意外訪問該視圖,從而意外刪除數據。

因此,您應該通過以下方式限制 HTTP 方法:

from django.views.decorators.http import require_http_methods

@require_http_methods(['DELETE', 'POST'])
def delete_room(request, pk):
    Room.objects.filter(pk=pk).delete()
    return redirect('home')

對於 HTML,您應該製作一個迷你表單,例如:

<form method="post" action="{% url 'delete_room' pk=room.pk %}">
    {% csrf_token %}
    <button type="submit" class="btn btn-danger">Delete Room</button>
</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通過刪除包含某些鍵的對象來過濾 json 文件

如何通過 sym 刪除前 252 行?

PHP 通過引用刪除

過濾數組以刪除反應中的過濾對象

過濾 DataFrame 以刪除 pyspark 中的重複值

刪除表中的過濾行而不是整行

如何通過元組枚舉過濾集合

如何通過 VBA (MS Excel) 從導入的 XML 中刪除標籤?

如何通過刪除列中的前面字符來更新 SQL 中的列?

如何通過迭代從向量中刪除重複項?

通過部分匹配刪除/覆蓋行

嘗試通過 CSS 刪除 ID

通過終端(Django)刪除 db.sqlite

通過 REGEX 刪除 CSS 和 js 版本

如何加入 .map 和 .filter 以過濾和刪除對像數組中的重複項

如何通過 Python 或 Shell 刪除具有相同起點和終點的重複部分

Flutter)我想知道如何通過按下按鈕從創建的列表中刪除項目

如何使用 Google Apps Script 通過函數刪除 Google 文檔中的所有內容?

Angular - 如何通過過濾表中的索引更新表元素?

如何通過子 POJO 的屬性過濾複合多對多 POJO?

如何通過多種條件過濾spss中的數據

如何通過另一個數組編號鍵過濾數組鍵

通過布爾系列過濾的熊貓

通過字符串過濾查找特定文本

通過匹配 id 屬性過濾數組

DDD通過多層過濾器

如何使用正則表達式過濾刪除一些數據框列,但保留包含某些字符的其他列?

通過pyqt5動態添加和刪除小部件

刪除通過 CloudFormation 包命令上傳的舊版本 lambda 函數