116

Python を使い始めるのに役立つ ToDo リスト アプリを作成しています。アプリは GAE で実行されており、データ ストアに todo アイテムを保存しています。みんなのアイテムを彼らに、そして彼らだけに見せたい。問題は、アプリが現在すべてのアイテムをすべてのユーザーに表示しているため、私はあなたが書いたものを見ることができ、あなたは私が書いたものを見ることができます. 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 が文字列ではないためだと思いました。値を文字列として読み取ったり、オブジェクトを文字列にキャストしたりできますか?

ありがとう!

編集:これが私のTodoクラスです

class Todo(db.Model):
    author = db.UserProperty()
    item = db.StringProperty()
    completed = db.BooleanProperty()
    date = db.DateTimeProperty(auto_now_add=True)

作成者を StringProperty に変更すると、何か悪影響がありますか? たぶん、キャストを完全にやめることができます。

4

5 に答える 5

6

str()同等です。

ただし、クエリをフィルタリングする必要があります。現在、あなたの質問はall()藤堂さんです。

todos = Todo.all().filter('author = ', users.get_current_user().nickname()) 

また

todos = Todo.all().filter('author = ', users.get_current_user())

Todo モデルで作成者を定義する内容によって異なります。StringPropertyまたはUserProperty。_

メモnicknameは方法です。テンプレート値の結果ではなく、メソッドを渡しています。

于 2013-05-27T07:37:59.033 に答える
2

関数 post() では:

todo.author = users.get_current_user()

したがって、str(todo.author) を取得するには、str(users.get_current_user()) が必要です。get_current_user() 関数によって何が返されますか?

オブジェクトの場合は、str ()" 関数が含まれているかどうかを確認してください。

エラーはそこにあると思います。

于 2013-05-27T08:46:18.820 に答える