使用django通过id删除对象

时间:2017-03-22 17:56:21

标签: django python-2.7

在学校项目上工作。我试图仅通过登录并创建它的人删除邮件。我希望其他用户看到它们,但只有创建者可以删除它。我有代码将删除数据库中的所有内容。我研究并发现Mysecret.objects.filter(id = request.session ['user_id'])。delete()应该可以工作,但是当我这样做时,页面不会删除任何东西只是刷新页面。

我只会发布视图和模型,因为我知道其他所有工作。我认为它只是我似乎无法确定的格式。

所以我现在所拥有的是我的消息ID是secret.id,我的创建者ID是secret.creator.id,会话ID是request.session ['user_id']。  我如何比较它们只删除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')

User模型的foreignKey部分:

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()

5 个答案:

答案 0 :(得分:1)

你应该这样:

Select part, variant, type 
from table1,table2 
where table1.part = table2.part;

答案 1 :(得分:1)

建议:不要保留自己的用户模型,但请使用Django's Authentication system

就您的代码而言,我相信您"创建"代码也不起作用,这是因为这一行Mysecret.objects.filter(id=request.session['user_id'])。因为这不会返回任何东西。您正在使用模型Mysecret进行搜索,但使用的用户ID不会返回任何内容。相反,你需要:

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

如果您使用Danjgo的Auth,您将拥有request.user并且可以执行以下操作:

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

另一个注意事项: Mysecret模型有loguser字段的原因是什么?你的情况似乎多余,

答案 2 :(得分:0)

删除创建者创建的所有邮件

Function formatIP(item As String, displayType As String) As String
'displayTypes CIDR,MASK,RANGE

'Set theRegEx = CreateObject("VBScript.RegExp")

Dim theRegEx As New RegExp


With theRegEx
.Global = True
.MultiLine = False
.IgnoreCase = False
.Pattern = "(?<address>\d{1,3}(?:\.\d{1,3}){2}\.(?<FromSeg>\d{1,3}))(?:(?:\/|\s+\/\s+)(?<CIDR>\d{1,2})|(?:-|\s+to\s+)(?<ToSeg>\d{1,3}(?![\d\.]))|(?:-|\s*to\s+)(?<ToIP>\d{1,3}(?:\.\d{1,3}){3})|\s+(?<Mask>25\d(?:\.\d{1,3}){3})|\s*)?"
.Execute (item)


End With


'Set MyMatches = theRegEx.Execute(item)
Debug.Print "SubMatches.Count: " & MyMatches.item(0).SubMatches.Count
If MyMatches.Count <> 0 Then
    With MyMatches
        For myMatchCt = 0 To .Count - 1
                Debug.Print "myMatchCt: " & myMatchCt
                For subMtCt = 0 To .item(subMtCt).SubMatches.Count - 1
                    Debug.Print "subMtCt: " & subMtCt
                    Debug.Print ("," &      .item(myMatchCt).SubMatches.item(subMtCt))
                Next
        Next
    End With
Else
Debug.Print "No Matches"
End If

formatIP = ""
End Function

按ID删除邮件,仅由其创建者

删除

例如:假设secret_id是消息的id

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

答案 3 :(得分: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>

答案 4 :(得分:0)

<块引用>

要通过 ID 从会话购物车中删除特定产品:

` def DeleteProductView(request,id):

cart = request.session.get('cart')
product = Product.objects.get(id=id)
var = str(product.id)
if request.method == 'POST':
    request.session.modified = True
    cart.pop(var)`
相关问题