【问题标题】:Django - Filter out All Values from one Field in Model and DeleteDjango - 从模型中的一个字段中过滤掉所有值并删除
【发布时间】:2026-02-21 06:15:02
【问题描述】:

我的 django 网站的一部分是,当用户从一个模型中删除一个值时,它会删除另一个模型的字段中的所有数据。目前,我无法从要删除的模型中的字段中过滤掉所有值。我知道我所有其他代码都可以工作,因为作为测试我可以做...

delete = Data_Repo1.objects.all()filter(user=request.user)
delete.delete()

当输入到我下面的代码中时,这很有效。我的问题是我需要从名为“Data_Repo1”的模型中名为“date1”的字段中删除所有数据,而不是从名为“Date_Repo1”的模型中的所有字段中删除所有数据。在上面的代码中,我已经厌倦了“values("date1")" 和 "values_list("date1")" 代替了 ".all()" 但我收到错误 "Cannot call delete() after .values() 或.values_list()”。 我怎样才能从一个模型的一个字段中“过滤”出所有值以删除它们?。代码如下。提前致谢。

def deletefield_repo1(request, pk):
context = {}
title = get_object_or_404(Field_Repo1, pk=pk)                                                                    #Title is needed to have the database value to delete
context['title'] = Field_Repo1.objects.values_list('title', flat=True).filter(user=request.user).get(pk=pk)      #Just to print the name fo the field to delete for the user
type = Field_Repo1.objects.values_list('type', flat=True).filter(user=request.user).get(pk=pk)
if request.method == "POST":
    title.delete()
    if type == 'Date1':
        delete = Data_Repo1.objects.values('date1').filter(user=request.user)
        delete.delete()
    return HttpResponseRedirect('/front_page/sheets/repository1user/')

return render(request, 'sheets/delete_fields/repo1_delete_field.html', context)

【问题讨论】:

    标签: django filter field


    【解决方案1】:

    您可以使用update() 函数,但这不会保存值。

    因此,我建议迭代过滤后的查询集并将字段更改为None,假设您的模型定义中为null=True

    qs_to_remove = Data_Repo1.filter(user=request.user)
    for instance in qs_to_remove:
        instance.date1 = None
        instance.save()
    

    【讨论】: