관련 관리자 및 역방향 조회를 사용하여이 Django 쿼리 셋을 정리하는 방법

43 테서 랙트

작업 코드가 있지만 최근 관련 관리자 및 역방향 조회에 대해 배웠으며이 코드에 적용하는 방법을 알고 싶습니다.

관련 관리자 / 역 조회를 활용하고 싶은 해키 방법은 다음과 같습니다 get_by_type_for_user(self, user).

class BadgeAssertionQuerySet(models.query.QuerySet):
    def get_user(self, user):
        return self.filter(user = user)

    def get_type(self, badge_type):
        return self.filter(badge__badge_type = badge_type)

    ...

class BadgeAssertionManager(models.Manager):
    def get_queryset(self):
    return BadgeAssertionQuerySet(self.model, using=self._db)

    ...

    def get_by_type_for_user(self, user):

        types = BadgeType.objects.all()
        qs = self.get_queryset().get_user(user)
        by_type =  [
                     {
                        'badge_type': t,
                        'list': qs.get_type(t)
                     } for t in types
                   ]

        return by_type

어디:

class BadgeAssertion(models.Model):
    badge = models.ForeignKey(Badge)
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    ...
    objects = BadgeAssertionManager()

과:

class Badge(models.Model):
    name = models.CharField(max_length=50, unique=True)
    badge_type = models.ForeignKey(BadgeType)
    ....

과:

class BadgeType(models.Model):
    name = models.CharField(max_length=50, unique=True)
    ...

내가 이것을 사용하는 것은 특정 사용자를 위해 배지 유형별로 정리하여 획득 한 배지를 출력하는 것입니다.

보기에서 :

context['badge_assertions_by_type'] = BadgeAssertion.objects.get_by_type_for_user(profile_user)

템플릿의 스 니펫 (사용자 프로필 페이지) :

    {% for badges in badge_assertions_by_type %}
        {{badges.badge_type.name}}    
          {% for assertion in badges.list %}
              {{assertion.badge.name}}
              {{assertion.time_issued}}
          {% endfor %}
      {% endfor %}
Rohit Jain

다음과 같이 방법을 단순화 할 수 있습니다.

def get_badges_by_type_for_user(self, user):        
    qs = self.get_queryset()
             .select_related('badge', 'badge__badge_type')
             .filter(user=user)
    badges = defaultdict(list)
    for badge_assertion in qs:
        badges[badge_assertion.badge.badge_type].append(badge_assertion.badge)
    return badges

사용 가능한 모든 BadgeType을 반복 할 필요는 없지만 얻은 어설 션을 배지 유형의 버킷으로 그룹화하기 만하면됩니다. 따라서 여과 badge_type가 필요 하지 않습니다 . defaultdict()여기 에서의 사용에 주목 하십시오. 이것을 시도하고 작동하는지 확인할 수 있습니다. 직접 테스트하지 않았습니다.

여기서는 결과 구조가 다릅니다. 이것의:

{
    badge_type1: [badge1, badge2, ...],
    badge_type2: [badge3, badge4, ...]
}

대신에:

[
    {'badge_type' : badge_type1, 'list': [badge1, badge2]},
    {'badge_type' : badge_type2, 'list': [badge3, badge4]}
]

첫 번째는 여기서 더 의미가 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

역할 및 OOP 상속을 사용하여 ASP.NET ID 사용자를 관리하는 방법

분류에서Dev

MongoDb를 사용하여 하나의 쿼리에서 문서 및 관련 패싯을 가져 오는 방법이 있습니까?

분류에서Dev

Laravel Eloquent를 사용하여 groupBy 및 havingRaw를 사용하여 최소 수의 관련 모델을 쿼리하는 방법

분류에서Dev

django-특정 쿼리에 대한 사용자 지정 관리자를 피하는 방법

분류에서Dev

사용자 및 관련 역할을 한 줄에 나열하는 SQL Server 쿼리

분류에서Dev

django 관리 양식에서 사용자 정의 레이블 및 콘텐츠를 추가하는 방법

분류에서Dev

숫자 추가 및 계산과 관련하여 체계에서 임의 목록을 관리하는 방법

분류에서Dev

조인을 사용하여 피벗 테이블 및 관련 데이터를 검색하는 Eloquent 쿼리

분류에서Dev

Wordpress에서 헤더 및 관리자 표시 줄을 조정하는 방법

분류에서Dev

GUI를 사용하여 사용자 및 그룹을 관리하는 방법은 무엇입니까?

분류에서Dev

GUI를 사용하여 사용자 및 그룹을 관리하는 방법은 무엇입니까?

분류에서Dev

Django 모델 관리자에 사용자 지정 JS를 추가하는 방법

분류에서Dev

ManyToMany와 관련하여 findBy 두 사용자에 대한 쿼리를 만드는 방법

분류에서Dev

ManyToMany와 관련하여 findBy 두 사용자에 대한 쿼리를 만드는 방법

분류에서Dev

Rails 6에서 acitve 관리자를 사용하여 관리자 계정 및 사용자 계정에 로그인하는 방법은 무엇입니까?

분류에서Dev

Django 관리자 및 게스트 언어 선택기에서 번역을 허용하는 방법

분류에서Dev

Django 1.8에서 treebeard 관리자를 사용하는 방법

분류에서Dev

Django-모든 관련 모델이 조건을 충족하는 경우 쿼리 셋에서 제외

분류에서Dev

중첩 된 AND, OR 및 관련 모델 조건을 사용하여 cakephp 쿼리 작성

분류에서Dev

기능 테이블 (AND 조건)을 사용하여 다 대다 관계를 쿼리하는 방법

분류에서Dev

관찰자 패턴을 사용하여 쿼리 값을 반환하는 방법

분류에서Dev

Laravel을 사용하여 카테고리와 관련된 하위 카테고리를 표시하는 방법

분류에서Dev

django-ckeditor를 사용하여 관리자의 서버에 파일 및 브라우저 파일을 업로드하는 방법은 무엇입니까?

분류에서Dev

Django 1.11의 쿼리 셋 TruncYear에서 생성 된 객체 관계로 목록을 직렬화하는 방법

분류에서Dev

ManytoMany Django를 역 쿼리하는 방법

분류에서Dev

Devise를 사용하여 관리자에게 관리자 전용 비밀번호 재설정 이메일을 보내는 방법은 무엇입니까?

분류에서Dev

SQL, 쿼리를 사용하여 관련 테이블에서 행을 삭제하는 방법은 무엇입니까?

분류에서Dev

Oracle 11g XE : LEFT SQL JOIN을 세미 조인 및 상관 쿼리를 사용하는 쿼리로 변환하는 방법은 무엇입니까?

분류에서Dev

Firebase 관리자를 사용하여 Firebase 사용자를 쿼리하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    역할 및 OOP 상속을 사용하여 ASP.NET ID 사용자를 관리하는 방법

  2. 2

    MongoDb를 사용하여 하나의 쿼리에서 문서 및 관련 패싯을 가져 오는 방법이 있습니까?

  3. 3

    Laravel Eloquent를 사용하여 groupBy 및 havingRaw를 사용하여 최소 수의 관련 모델을 쿼리하는 방법

  4. 4

    django-특정 쿼리에 대한 사용자 지정 관리자를 피하는 방법

  5. 5

    사용자 및 관련 역할을 한 줄에 나열하는 SQL Server 쿼리

  6. 6

    django 관리 양식에서 사용자 정의 레이블 및 콘텐츠를 추가하는 방법

  7. 7

    숫자 추가 및 계산과 관련하여 체계에서 임의 목록을 관리하는 방법

  8. 8

    조인을 사용하여 피벗 테이블 및 관련 데이터를 검색하는 Eloquent 쿼리

  9. 9

    Wordpress에서 헤더 및 관리자 표시 줄을 조정하는 방법

  10. 10

    GUI를 사용하여 사용자 및 그룹을 관리하는 방법은 무엇입니까?

  11. 11

    GUI를 사용하여 사용자 및 그룹을 관리하는 방법은 무엇입니까?

  12. 12

    Django 모델 관리자에 사용자 지정 JS를 추가하는 방법

  13. 13

    ManyToMany와 관련하여 findBy 두 사용자에 대한 쿼리를 만드는 방법

  14. 14

    ManyToMany와 관련하여 findBy 두 사용자에 대한 쿼리를 만드는 방법

  15. 15

    Rails 6에서 acitve 관리자를 사용하여 관리자 계정 및 사용자 계정에 로그인하는 방법은 무엇입니까?

  16. 16

    Django 관리자 및 게스트 언어 선택기에서 번역을 허용하는 방법

  17. 17

    Django 1.8에서 treebeard 관리자를 사용하는 방법

  18. 18

    Django-모든 관련 모델이 조건을 충족하는 경우 쿼리 셋에서 제외

  19. 19

    중첩 된 AND, OR 및 관련 모델 조건을 사용하여 cakephp 쿼리 작성

  20. 20

    기능 테이블 (AND 조건)을 사용하여 다 대다 관계를 쿼리하는 방법

  21. 21

    관찰자 패턴을 사용하여 쿼리 값을 반환하는 방법

  22. 22

    Laravel을 사용하여 카테고리와 관련된 하위 카테고리를 표시하는 방법

  23. 23

    django-ckeditor를 사용하여 관리자의 서버에 파일 및 브라우저 파일을 업로드하는 방법은 무엇입니까?

  24. 24

    Django 1.11의 쿼리 셋 TruncYear에서 생성 된 객체 관계로 목록을 직렬화하는 방법

  25. 25

    ManytoMany Django를 역 쿼리하는 방법

  26. 26

    Devise를 사용하여 관리자에게 관리자 전용 비밀번호 재설정 이메일을 보내는 방법은 무엇입니까?

  27. 27

    SQL, 쿼리를 사용하여 관련 테이블에서 행을 삭제하는 방법은 무엇입니까?

  28. 28

    Oracle 11g XE : LEFT SQL JOIN을 세미 조인 및 상관 쿼리를 사용하는 쿼리로 변환하는 방법은 무엇입니까?

  29. 29

    Firebase 관리자를 사용하여 Firebase 사용자를 쿼리하는 방법은 무엇입니까?

뜨겁다태그

보관