포함을 사용하여 Django 필터 다 대다
다 대다 관계를 통해 여러 개체를 필터링하려고합니다. trigger_roles 필드에 여러 항목이 포함될 수 있기 때문에 포함 필터를 시도했습니다. 그러나 그것이 문자열과 함께 사용되도록 설계 되었기 때문에 나는이 관계를 어떻게 필터링 해야하는지 거의 무력합니다 (value_list () atm을 무시할 수 있습니다.).
이 기능은 사용자 프로필에 연결됩니다.
def getVisiblePackages(self):
visiblePackages = {}
for product in self.products.all():
moduleDict = {}
for module in product.module_set.all():
pkgList = []
involvedStatus = module.workflow_set.filter(trigger_roles__contains=self.role.id,allowed=True).values_list('current_state', flat=True)
내 워크 플로 모델은 다음과 같습니다 (단순화 됨).
class Workflow(models.Model):
module = models.ForeignKey(Module)
current_state = models.ForeignKey(Status)
next_state = models.ForeignKey(Status)
allowed = models.BooleanField(default=False)
involved_roles = models.ManyToManyField(Role, blank=True, null=True)
trigger_roles = models.ManyToManyField(Role, blank=True, null=True)
해결책은 조용하지만 간단 할 수 있지만 내 뇌는 말하지 않습니다.
당신의 도움을 주셔서 감사합니다.
다음과 같은 것을 시도해 보셨습니까?
module.workflow_set.filter(trigger_roles__in=[self.role], allowed=True)
또는 self.role.id
pks 목록이 아닌 경우 :
module.workflow_set.filter(trigger_roles__id__exact=self.role.id, allowed=True)
이를 달성하는 가장 간단한 방법은 .NET Framework에서 전체 인스턴스 (ID 대신)에 대한 동등성을 확인하는 것 ManyToManyField
입니다. 인스턴스가 다 대다 관계 내에 있는지 확인합니다. 예:
module.workflow_set.filter(trigger_roles=self.role, allowed=True)
첫 번째 예에서는 특이점이 거의 맞습니다. 목록인지 확인하기 만하면됩니다. 두 번째 예는 확인하는 trigger_roles__id__exact
것이 더 나은 솔루션입니다.
module.workflow_set.filter(trigger_roles__in=[self.role.id],allowed=True)
나는 이것이 오래된 질문이라는 것을 알고 있지만 OP가 그가 찾고 있던 답을 얻지 못한 것 같습니다. 당신은 당신이 비교할 ManyToManyFields 두 세트가있는 경우, 트릭이 사용하는 것입니다 __in
, 연산자를하지 contains
. 예를 들어 필드에 ManyToMany가 "Group"인 "Event"모델이 있고 eventgroups
사용자 모델 (분명히)이 Group에 연결된 경우 다음과 같이 쿼리 할 수 있습니다.
Event.objects.filter(eventgroups__in=u.groups.all())
참고 URL : https://stackoverflow.com/questions/4507893/django-filter-many-to-many-with-contains
'Programing' 카테고리의 다른 글
Capybara를 사용하여 요소에서 HTML을 어떻게 얻습니까? (0) | 2020.11.15 |
---|---|
iOS에서 자신의 http URL 스키마를 처리 할 수 있습니까? (0) | 2020.11.15 |
dmp 파일 및 로그 파일에서 Oracle 데이터베이스를 가져 오는 방법은 무엇입니까? (0) | 2020.11.15 |
Twitter Bootstrap 3, 세로 중앙 콘텐츠 (0) | 2020.11.15 |
Python 패키지의 종속성을 찾는 방법 (0) | 2020.11.15 |