我可以删除 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")
我正在用 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")