我正在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'???
答案 0 :(得分:1)
例如:
# 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')
答案 1 :(得分:1)
我认为您需要设置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")
这是我在stackoverflow中的第一个答案,希望这能帮到你
如果您不想设置related_name,请尝试:
B.A_set.filter(att2="test")
答案 2 :(得分:0)
或者您可以创建另一个字段
在模型中如下:
class Persons(model.Models):
name = models.CharField(max_length=100)
is_active = models.BooleanField(default=True)
给x一个" is_active" =假
x1 = Persons.objects.get(name='x')
x1.is_active = False
x1.save()
现在您可以像这样过滤:
queryset = Persons.objects.filter(is_active=True)