1

そのように定義されたモデルがあるとしましょう

class BlogPost(Models.Model):
    """ Defines a blog model """
    blog    = models.TextField()
    blog_id = models.AutoField(primary_key=True)
    author  = models.CharField()

「john doe」など、特定の著者のブログ投稿にアクセスするメソッドを定義したいと考えています。john doe が所有するすべてのブログ投稿にアクセスするメソッドを定義し、それらの blog_id を Python リストに入れるにはどうすればよいでしょうか?

def selectPostsByUser(user):
""" Implement function to select all object """

注: データ フィールドの貧弱な表現は無視してください。それらは純粋に恣意的なものです。例からあいまいさを取り除くために名前を付けただけです。

4

4 に答える 4

1

models.py

class BlogPost(Models.Model):
    """ Defines a blog model """
    blog    = models.TextField()
    blog_id = models.AutoField(primary_key=True)
    author  = models.CharField()

    @classmethod
    def selectPostsByUser(cls, user):
        return cls.objects.filter(author=user)

ビュー.py

user = "john doe"
blogs = BlogPost.selectPostsByUser(user)
于 2013-03-29T01:58:13.240 に答える
1

モデルにユーザーへの外部キーがあることを願っています:

def selectPostsByUser(user):
    return self.objects.filter(user__id=user.id).values_list('blog_id', flat=True)

メソッドに渡すユーザーが作成selectPostsByUser者 (および User モデル オブジェクト) である場合。次に、モデルの ForiegnKey フィールドとして author が必要です。

于 2013-03-29T01:32:33.927 に答える
0

authorフィールドはではなく、ForeignKeyである必要がありCharFieldます。これは、Django で関係を表す方法です。

Django では、ユーザーに関連付けられた投稿オブジェクトを取得できます: user.blog_set.all(). そこから、ID を抽出するのは簡単です。

また、Djangoは objects のフィールドを自動的に提供するidため、独自のフィールドを定義する必要はありませんblog_id


Django の "polls" チュートリアルに従うと、アプリの構築に必要なすべてのツールが手に入ります。

于 2013-03-29T01:32:39.390 に答える
0

この質問に直接答えるために、作成者が実際には「CharField」であるとしましょう。次のようにして、「jane doe」からすべてのブログ投稿を取得し、すべての ID をリストに入れることができます....

posts = BlogPost.objects.filter(author='jane doe')
list = []
for items in posts:
    lists.append(items.blog_id)
于 2013-03-29T06:34:58.033 に答える