2010-07-25 5 views
1

저는 Google Apps를 처음 사용하고 있으며 Google Apps 사이트에 나열된 hello world 앱을 사용하고 있습니다. 일단 앱을 끝내고 나면 앱을 확장하려고했습니다. 내가 추가 한 첫 번째 사항은 제출 한 사용자가 방명록 게시물을 필터링 할 수있는 기능이었습니다.코드에서 UserProperty의 멤버에 액세스 할 수 없습니다.

내가 변경/추가 한 것은 단순히 WSGIApplication의 핸들러이고이 핸들러의 새로운 클래스입니다.

<b>{{ greeting.author.nickname }}</b> wrote: 

에 :

<a href="/authorposts/{{ greeting.author.user_id }}"> 
    {{ greeting.author.nickname }} 
</a></b> wrote: 
내가에서 저자의 별명을 표시하는 라인을 변경 장고 템플릿을 사용하여

class Greeting(db.Model): 
    author = db.UserProperty() 
    content = db.StringProperty(multiline = True) 
    date = db.DateTimeProperty(auto_now_add=True) 

:이 모델은 I는 참조 용으로 게시합니다, 동일

내가 가지고있는 문제는 "greeting.author.nickname"또는 "user_id"와 같은 다른 속성에 액세스 할 수 없다는 것입니다. 그러나 템플릿에 대해 위에 나열된 코드가 제대로 작동하고 닉네임을 표시 할뿐만 아니라 제작자에 대한 링크가 제대로 만들어지기 때문에 Django 템플릿에서 액세스 할 수 있습니다.

저자 (UserProperty) 속성 "user_id"를 기반으로 URL 매핑을 사용하고 있습니다. user_id를 기준으로 사용하여 데이터 저장소를 필터링 할 수있는 방법을 찾으려고합니다. 나는 필터에 쿼리를 직접 적용 해 보았습니다. 모든 레코드를 가져온 다음 그 레코드를 반복하고 If ... Else 절을 ​​사용했습니다.

Django 템플릿에 표시되는 값이 데이터 저장소에 저장된다는 것을 알고 있습니다. 필터 기준으로 사용하려면 어떻게해야합니까? Greeting 모델을 조회하면

+1

보기가 어떻게 생깁니 까? – xj9

+0

죄송합니다, 장고를 사용하고 있다고 생각했습니다. 인사말 클래스의 인스턴스를 만들어보세요. – xj9

답변

1

, 당신은 내 필드 에 필터링 할 수 없습니다Greeting.author (예를 들어, greeting.author.nickname). SQL에서는 GreetingUser 테이블에 대해 조인을 수행하면됩니다. 그러나 GAE에서는 쿼리하는 모델에 직접 포함 된 속성 만 쿼리 할 수 ​​있습니다. 즉, 를 추가 -

# fetch up to 10 greetings by the current user 
user = users.get_current_user() 
results = Greeting.all().filter('author =', user).fetch(10) 

당신은 당신의 Greeting 모델을 비정규해야,author 내에서 다른 필드 필터링하려면 : author 이후

당신은 이 같은 사용자가 필터 수하는 db.UserProperty입니다 Greeting을 필터링 할 수 있도록 author의 필드 중을 복사하십시오. 당신이 author.nickname으로 필터링하고 싶었 예를 들어, 당신은 당신의 Greeting 모델에 author_nickname 필드를 추가 할 (그리고 author.nickname 최신 상태로 그 가치를 주기적으로 업데이트) :

class Greeting(db.Model): 
    author = db.UserProperty() 
    author_nickname = db.StringProperty() # denormalization (copy of author.nickname) 
    content = db.StringProperty(multiline = True) 
    date = db.DateTimeProperty(auto_now_add=True) 

당신이 모델에 비정규 이런 종류를 추가하는 경우 author이 업데이트 될 때마다 Nick Johnson의 aetycoon library을 사용하여 author_nickname을 업데이트하면 도움이 될 수 있습니다. 그렇게하면 수동으로 해당 관계를 적용 할 필요가 없습니다.

+0

첫 번째 예제와 관련된 문제는 user_id를 사용하여 필터링하려고하지만 해당 사용자로 로그인하지 않은 것입니다. 내가 필터링하려고하는 ID로 사용자 개체를 만들 수있는 방법이 있습니까? 두 번째 예와 관련하여 필자는 그 경로를 따라 내려가는 방법을 고려해 보았습니다. 그리고 이것이 작동하는 유일한 방법이라면 구현할 것입니다. 그러면 라이브러리에서 체크 아웃 할 것입니다. 사람들이 비정규 화 된 데이터를 일관성있게 유지하는 기능을 갖춘 라이브러리를 만들었습니다. 아마도이 시점에서 유일한 방법 일 것입니다. – Timbermar

+0

원하는 기능을 얻으려면 비정규 화가 필요할 것 같습니다. 'greeting' 모델에'user_id'를 추가 할 수도 있습니다. –

+0

그래, 내가 사용하는 방법이 될 것 같아요, 나는이 기능을 제공 할 수있는 것을 찾지 못했습니다. 감사! – Timbermar

관련 문제