Python을 시작하는 데 도움이되는 ToDo 목록 앱을 작성 중입니다. 앱이 GAE에서 실행 중이며 데이터 저장소에 할 일 항목을 저장하고 있습니다. 모든 사람의 아이템을 그들에게만 전시하고 싶습니다. 문제는 앱이 현재 모든 사용자에게 모든 항목을 표시하므로 내가 작성한 내용과 내가 작성한 내용을 볼 수 있다는 것입니다. todo.author 개체를 문자열로 캐스팅하고 사용자 이름과 일치하는지 확인하는 것이 좋은 시작이 될 것이라고 생각했지만 그 방법을 알 수 없습니다.
이것이 내 main.py에 있습니다.
...
user = users.get_current_user()
if user:
nickname = user.nickname()
todos = Todo.all()
template_values = {'nickname':nickname, 'todos':todos}
...
def post(self):
todo = Todo()
todo.author = users.get_current_user()
todo.item = self.request.get("item")
todo.completed = False
todo.put()
self.redirect('/')
내 index.html에는 원래 다음이 있습니다.
<input type="text" name="item" class="form-prop" placeholder="What needs to be done?" required/>
...
<ul>
{% for todo in todos %}
<input type="checkbox"> {{todo.item}} <hr />
{% endfor %}
</ul>
하지만 항목을 만든 사용자에게만 항목을 표시하고 싶습니다. 나는 노력할 생각
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr />
{% endifequal %}
{% endfor %}
아무 소용이 없습니다. 목록이 비어 있습니다. todo.author가 문자열이 아니기 때문이라고 생각했습니다. 값을 문자열로 읽을 수 있습니까? 아니면 객체를 String으로 캐스트 할 수 있습니까?
감사!
편집 : 여기 내 할일 클래스입니다
class Todo(db.Model):
author = db.UserProperty()
item = db.StringProperty()
completed = db.BooleanProperty()
date = db.DateTimeProperty(auto_now_add=True)
저자를 StringProperty로 변경하면 부정적인 영향을 미칩니 까? 캐스팅을 아예 잊을 수있을 것 같습니다.
답변
파이썬에서, str()
방법은 받는 사람과 유사하다 toString()
다른 언어 방법. 문자열로 변환 할 객체를 매개 변수로 전달하는 것을 호출합니다. 내부적 __str__()
으로는 매개 변수 객체 의 메서드를 호출하여 문자열 표현을 얻습니다.
그러나이 경우 에는 별칭 문자열과 UserProperty
유형 인 데이터베이스 의 작성자를 비교 users.User
합니다. nickname
대신에 작성자 의 속성을 todo.author.nickname
템플릿에서 비교하고 싶을 것 입니다.
답변
파이썬에서 우리는 __str__()
방법을 사용할 수 있습니다 .
다음과 같이 클래스에서 재정의 할 수 있습니다.
class User:
firstName = ''
lastName = ''
...
def __str__(self):
return self.firstName + " " + self.lastName
그리고 달릴 때
print(user)
함수를 호출하고 __str__(self)
firstName과 lastName을 인쇄합니다.
답변
str()
동등합니다.
그러나 쿼리를 필터링해야합니다. 현재 귀하의 쿼리는 all()
Todo의 것입니다.
todos = Todo.all().filter('author = ', users.get_current_user().nickname())
또는
todos = Todo.all().filter('author = ', users.get_current_user())
Todo 모델에서 작성자를 정의하는 것에 따라. A StringProperty
또는 UserProperty
.
메모 nickname
는 방법입니다. 템플릿 값의 결과가 아니라 메서드를 전달하고 있습니다.
답변
__unicode__
모델 에서 메서드를 정의해야 하며 인스턴스를 참조 할 때 템플릿이 자동으로 호출합니다.
답변
post () 함수에서 :
todo.author = users.get_current_user()
따라서 str (todo.author)를 얻으려면 str (users.get_current_user ())가 필요합니다. get_current_user () 함수는 무엇을 반환합니까?
객체 인 경우 str () “함수가 포함되어 있는지 확인하십시오 .
오류가 거기에 있다고 생각합니다.