2017-03-22 163 views
0

在學校項目上工作。我正嘗試僅通過登錄並創建它的人員刪除郵件。我希望其他用戶看到它們,但只有創建者才能刪除它。我有代碼將刪除數據庫中的所有內容。我研究並發現Mysecret.objects.filter(id = request.session ['user_id']).delete()應該可以工作,但是當我這樣做時,頁面不會刪除任何內容,只是刷新頁面。用django通過id刪除對象

我只會發布視圖和模型,因爲我知道其他所有的工作。我認爲它只是我不能確定的格式。

因此,我得到的現在是我的我的消息ID是secret.id,我有創造者ID是secret.creator.id和會話ID request.session ['user_id']。 我怎麼做比較它們只刪除THA tmessage

Views.py 

from django.shortcuts import render, redirect 
from . models import Mysecret 
from ..logReg.models import User 


# Create your views here. 

def index(request): 
    context = { 

    "secret": Mysecret.objects.all(), 

    } 

    return render(request, 'secretdojo/index.html', context) 


def create(request): 
    secreteid= User.objects.get(id=request.session['user_id']) 

    Mysecret.objects.create(secret=request.POST['message'], creator=secreteid) 

    return redirect('secretdojo:index') 

def removesecret(request): 


    Mysecret.objects.filter(id=request.session['user_id']).delete() 



    return redirect('secretdojo:index') 


def topsecret(request): 
    context = { 


    } 

    return redirect('/') 

model.py 


from __future__ import unicode_literals 
from django.db import models 
from ..logReg.models import User 

class Mysecret(models.Model): 
    secret = models.CharField(max_length =500) 
    created_at = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(auto_now = True) 
    loguser = models.ManyToManyField(User, related_name='loguser') 
    creator = models.ForeignKey(User, related_name='creator') 

用戶模型的外鍵部分:

class User(models.Model): 
    first_name = models.CharField(max_length = 50) 
    last_name = models.CharField(max_length = 50) 
    email = models.CharField(max_length = 100) 
    password = models.CharField(max_length =100) 
    created_at = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(auto_now = True) 

    objects = UserManager() 
+0

請發帖我的祕密模型 –

+0

如果'creator'包含創建者,那麼爲什麼你要比較用戶和'id'? –

+0

ta是我的seceret模型 –

回答

1

你應該是這樣的:

Mysecret.objects.filter(creator=request.user).delete() 
+0

TY爲您的文章,但沒有不起作用 –

+0

@DavidHollenbeck:它會工作得很好,如果您使用Django身份驗證..或作出相應的更改更改。 –

1

建議:不要保留您自己的用戶型號,但請使用Django's Authentication system

就您的代碼而言,我相信您的「創建」代碼也不起作用,這是因爲此行Mysecret.objects.filter(id=request.session['user_id'])。因爲這不會返回任何東西。您正在模型Mysecret中搜索,但使用用戶標識,它不會返回任何內容。相反,你需要有:

Mysecret.objects.filter(creator=request.session['user_id']) 

如果使用Danjgo的驗證,你將有request.user並能做到以下幾點:

Mysecret.objects.filter(creator=request.user) 

另外一個說明:什麼是具有loguser場的原因我的祕密模特?這似乎是多餘的了你的情況,

+0

它爲多人到多人的日誌用戶以後添加更多的應用程序。上面的方法不會中斷,但不會刪除只刷新頁面。 –

+0

請嘗試通過打印Mysecret.objects.filter(creator = request。)的值來進行調試。session ['user_id'])'看看它會返回什麼。如果它返回None,那麼你的查詢不起作用。你確定你將用戶ID存儲在會話中嗎? –

+0

我知道由於我有目前在我的HTML ID用戶他們的打印即時得到的ID \t ID消息\t課程名稱\t上架日期\t行動這是一個測試,我希望它的工作原理\t 3月22日,2017年,上午10:50 \t 刪除 \t 2017年3月22日上午11時12 \t 刪除 \t 2017年3月22日上午11點16 \t 刪除 –

0

要刪除的創建者創建的所有消息

Mysecret.objects.filter(creator=request.session['user_id']).delete() 

通過ID和只有創建者刪除消息

例如:假設secret_id是消息的ID

Mysecret.objects.filter(creator=request.session['user_id'],id =secret_id).delete() 
0

答案如下。

mainid = Mysecret.objects.get(id=id) 
userid =User.objects.get(id=request.session['user_id']) 

if mainid.creator != userid: 
    return False 
mainid.delete() 

<td>{{ dog.created_at }}</td> 
       {% if dog.creator.id == request.session.user_id %} 
       <td><form action="{% url 'secretdojo:remove' id=dog.id %}">{% csrf_token %}<input class="btn btn-default" type="submit" value="Remove"></form></td> 
       {% endif %} 
      </tr> 
      {% endfor %} 
     </table>