반응형
Django는 ManyToMany 카운트에서 모델을 필터링합니까?
내 models.py에 다음과 같은 것이 있다고 가정합니다.
class Hipster(models.Model):
name = CharField(max_length=50)
class Party(models.Model):
organiser = models.ForeignKey()
participants = models.ManyToManyField(Profile, related_name="participants")
이제 내 views.py에서 참가자가 0 명 이상인 사용자를 위해 파티를 가져 오는 쿼리를 수행하고 싶습니다.
아마도 다음과 같습니다.
user = Hipster.get(pk=1)
hip_parties = Party.objects.filter(organiser=user, len(participants) > 0)
가장 좋은 방법은 무엇입니까?
이것이 작동한다면 이것이 내가 할 방법입니다.
최선의 방법은 최고의 성능, 가장 유지 보수 가능한 등 많은 것을 의미 할 수 있습니다. 따라서 이것이 최선의 방법이라고 말하지는 않겠지 만, 유지 보수가 더 쉬워 보이기 때문에 가능한 한 ORM 기능을 고수하고 싶습니다.
from django.db.models import Count
user = Hipster.objects.get(pk=1)
hip_parties = (Party.objects.annotate(num_participants=Count('participants'))
.filter(organiser=user, num_participants__gt=0))
Party.objects.filter(organizer=user, participants__isnull=False)
Party.objects.filter(organizer=user, participants=None)
더 쉽게 exclude
:
# organized by user and has more than 0 participants
Party.objects.filter(organizer=user).exclude(participants=None)
고유 한 결과도 반환합니다.
@ Yuji-'Tomita'-Tomita 답변에서 파생 된 중복 레코드를 제외하기 위해 .distinct ( 'id')도 추가했습니다.
Party.objects.filter(organizer=user, participants__isnull=False).distinct('id')
따라서 각 당사자는 한 번만 나열됩니다.
참고 URL : https://stackoverflow.com/questions/7883916/django-filter-the-model-on-manytomany-count
반응형
'Programing' 카테고리의 다른 글
스테이징 영역에서 디렉토리 하위 트리를 제거하려면 어떻게합니까? (0) | 2020.11.30 |
---|---|
redirect_to! = return (0) | 2020.11.30 |
AlertDialog의 setCancelable (false) 메서드가 작동하지 않습니다. (0) | 2020.11.30 |
Postgresql 잘림 속도 (0) | 2020.11.30 |
Ansible : 별도의 Vault 파일에서 인벤토리 파일의 일부 변수를 암호화하는 방법은 무엇입니까? (0) | 2020.11.30 |