我目前无法过滤数据。
模型
class Member(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
team_id = models.UUIDField(null=True)
username = models.CharField('', max_length=30)
is_active = models.BooleanField(default=False)
@property
def organization_id(self):
"""This is to get the organization Id
"""
team = Team.objects.get(pk=self.team_id)
return team.organization_id
现在我计划使用organation_id = 1 过滤所有成员。
这就是我需要的:
memberList = Member.objects.filter(organization_id='1')
所以我收到了这个错误:
Cannot resolve keyword 'organization_id' into field. Choices are: id, is_active, team_id, username
如何使用organization_id过滤成员?
答案 0 :(得分:1)
您在模型成员中没有任何名为organization_id的字段,这就是错误原因。
你可能想要这个:
result_list = []
memberList = Member.objects.all()
for item in memberList :
if item.organization_id() == '1' :
result_list.append(item)
print result_list
结果列表 result_list 将包含模型成员的所有必需对象。
感谢。
答案 1 :(得分:0)
根据我对你的问题的理解,我认为你有两个模特课。
让我们举个例子
class Organization(models.Model):
name = models.CharField(max_length=30)
class Member(models.Model):
username = models.CharField(blank=True, max_length=30)
team = models.ForeignKey(Organization)
您使用UUIDField作为主键。我省略了它。 Django自动创建主键字段。我很好奇你首先使用UUID Field的目的是什么。
无论如何,如果您是第一次创建组织。 PK号码为1。
假设您正在使用python shell进行测试
python manage.py shell
>> import your models
>> Organization.objects.create(name="test1")
然后您可以使用外键关系连接此组织。
>> organization = Organization.objects.get(name="test1")
>> Member.objects.create(username="bob", team=organization)
下次如果您想获得test1组织中的成员。
>> organization = Organization.objects.get(name="test1")
>> Member.objects.filter(team=organization)
或者只是把组织'test1'的PK号。我们说它是1
>> Member.objects.filter(team=1)
如果修复了您只想获得组织为“1”的成员,则可以在模型中添加自定义管理器。
class OrganizationManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(team=1)
class Organization(models.Model):
name = models.CharField(max_length=30)
class Member(models.Model):
username = models.CharField(blank=True, max_length=30)
team = models.ForeignKey(Organization)
objects = models.Manager()
organization = OrganizationManager()
您可以获得以下成员
>> Member.organization.all()
它将返回组织pk 1中的成员。
答案 2 :(得分:0)
memberList = Member.objects.all().annotate(org_id=F('calculate organization id over other model fields')).filter(org_id='1')
在我的情况下,这有帮助,有F是
from django.db.models import F