首页 > 解决方案 > 输入后删除对象

问题描述

我正在构建一个简单的网络应用程序,其中 - 我正在尝试实现一个功能 -

如果word用户在其中输入了一个单词,Another models's objects那么这个词将被删除,我的意思是,我已经存储few names在一个模型上,比如:carbikeraincalendar。我制作了另一个名为 的模型BlogPost,因此当用户提交表单时,如果在其中提到的名称,another model's objects那么该名称将被删除。名称没有删除。

模型.py

class BlogPost(models.Model):
    title = models.CharField(max_length=30,default='')
    name = models.CharField(max_length=30,default='')

class All_Name(models.Model):
    names = models.CharField(max_length=30,default='')

视图.py

def new_blog_post(request):
    allNames= All_Name.objects.all().values_list('names', flat=True)

    if request.method == 'POST':
        form = PostForm(data=request.POST)
        if form.is_valid():

            formName = form.cleaned_data['name']
            new_post = form.save(commit=False)
            if formName in allNames:
                new_post.save()
       # Deleting Here
                allNames = formName
                allNames.delete()
                
            else:
                return redirect('home')

    else:
        form = PostForm()

    context = {'form':form}
    return render(request, 'new_blog_post.html', context)

我试过什么?:-

formName.delete()

但它没有保存任何内容,也没有删除名称。

allNames.delete()

但它显示

在 .values() 或 .values_list() 之后无法调用 delete()

我已经尝试了很多次,但对我没有任何效果。

谢谢你。

标签: pythondjangodjango-modelsdjango-views

解决方案


您的删除逻辑是错误的。这是你应该做的。

allNames = All_Names.objects.get(names = formName) #Fetch the actual record from the ORM and then call delete
allNames.delete()

当您调用它时显示错误的原因.delete()是因为value_list()折叠了 Django 的 ORM 功能并为您返回了一个本机 python 列表格式。.delete()是 Django 的一个 ORM 特性。


推荐阅读