2013-10-17 4 views
2

django 모델에서 검색어를 만들 수 있습니까? 내가 issued_toBookBookCopy intances의 수를 반환 copies_available() 원하는Django - models.py의 필터 검색어 집합

class Book(models.Model): 
    ... 
    def copies_available(self): 
     pass 

class BookCopy(models.Model): 
    ... 
    book_category = models.ForeignKey(Book, related_name='copies') 
    issued_to = models.ForeignKey(EndUser, related_name='issued_books', null=True, blank=True) 

None

답변

2

이 작동합니다 :

class Book(models.Model): 
    ... 
    def copied_available(self): 
     return self.copies.filter(issued_to__isnull=True).count() 
+0

덕분에 마법처럼 일했다. –

-1

예는 그냥 limit_choices_to을 설정됩니다

나는이 개 모델을 가지고 ForeignKey. docs에서 :

"이 개체에 대해 사용 가능한 관리자 또는 ModelForm 선택을 제한하는 조회 인수 및 값 (쿼리 만들기 참조) 사전이 옵션을 사용하여 Python datetime 모듈의 함수를 날짜별로 개체 선택을 제한 할 수 있습니다. 예를 들어 "

limit_choices_to = {'pub_date__lte': datetime.date.today} 
0

을 나는이 몇 년 전에했던, 그래서 조금 변경되었을 수 있습니다 :

을3210

BookManager 클래스를 만들고 거기에 기능을 추가하지 마십시오. 다음과 같이 귀하의 도서 모델의 개체 변수에 관리자를 지정 : 템플릿에 따라서

class BookManager(models.Manager): 

    def copied_available(self): 

     queryset = BookCopy.objects.filter(book_category=self.id).filter(issued_to is not None) 

     return queryset.count() 

class Book(models.Model): 
    ... 
    objects = BookManager() 

을, 당신은 같은 것을 수행 할 수 있습니다!

<p> Copies: {{ thebook.copied_available }}</p> 
+0

결과를 필터링하는 동안 djangos 기본 모델 관리자를 덮어 쓰지 않아야합니다. 원하지 않는 결과를 초래할 수 있습니다 (https://docs.djangoproject.com/en/dev/topics/db/managers/#writing-correct-managers-for-use). -in-automatic-manager-instances) – Jingo