我可以删除 python 中查询集的一项但不删除数据库中的该项吗?

Can I delete an item of a queryset in python but without deleting that item on the database?

我正在用 django 创建一个应用程序,我遇到了下一个问题:

我使用下一个命令行得到 queryset

queryset = Persons.objects.all()

假设结果列表是下一个:['x', 'y', 'z']

我想删除该列表的一个元素 x,这样生成的列表就是:['y', 'z'].

我不想删除元素 x。所以我不能使用命令 item.delete().

如果我的模型是:

class A(models.Model):
    att1= models.ForeignKey(B)
    att2 = models.CharField(max_length=128)
...

class B(models.Model):
    ident = models.CharField(max_length=128)
...

如何获取与 A 和 A.att2 值相关的 B 对象的查询集 == 'test' ???

例如:

# we usually don't import User directly
# but I just wanted to show how to use exclude
from django.contrib.auth import User
User.objects.all()  # will return all users
# will return exxactly the same queryset
# except that the user with the `admin` username
# will be excluded from the queryset.
User.objects.all().exclude(username='admin')

如果你有一些相关领域,比如:

class Item(models.Model):
    user = models.ForeignKey('User')
    value = models.CharField(max_length=128)

您可以排除一些用户拥有 'admin' 用户名的项目。 您可以使用 exclude 函数。

Item.objects.exclude(user__username='admin')

或者您可以创建另一个字段

在模型中类似于:

class Persons(model.Models):
    name = models.CharField(max_length=100)
    is_active = models.BooleanField(default=True)

给 x 一个值 "is_active" = False

x1 = Persons.objects.get(name='x')
x1.is_active = False
x1.save()

现在您可以像这样过滤:

queryset = Persons.objects.filter(is_active=True)

我认为你需要设置 related_name:

class A(models.Model):
    att1= models.ForeignKey(B, related_name='A_model')
    att2 = models.CharField(max_length=128)

class B(models.Model):
    ident = models.CharField(max_length=128)

这样查询:

B.objects.filter(A_model__att2="test")

这是我在 Whosebug 中的第一个答案,希望对您有所帮助

如果您不想设置 related_name 尝试:

B.A_set.filter(att2="test")