2017-04-26 5 views
1

私は、ユーザーによってレビューされていない本のリスト、つまりユーザーがレビューを書いていない書籍のリストを生成しようとしています。ここに私のmodels.pyからの重要な詳細されていますdjangoデータベースから適切にデータにアクセスするには?

books1 = reviews.objects.filter(name=username) 

そして取得する:

class book(models.Model): 
    name = models.CharField(max_length=100) 
    isbn = models.CharField(max_length=15) 
    author = models.CharField(max_length=120) 
    year = models.CharField(max_length=15) 
    genre_name = models.IntegerField() 
    rating = models.IntegerField() 
    description = models.CharField(max_length=2000) 
    img = models.ImageField() 

    def __str__(self): 
     return self.name 

class reviews(models.Model): 
    name = models.CharField(max_length=150) 
    bookid = models.IntegerField() 
    review = models.CharField(max_length=750) 
    rating = models.IntegerField(default=0) 

    def __str__(self): 
     return self.name 

だから、私は、最初のユーザーが、このような何かを検討している本を取得しようとしてきました私はランダムにrange(1,132)とに5つの数字を生成し、最初

allb = book.objects.all() 

:図書のデータベースは、私は次のことをやっています、配列randbにそれらを格納し、このような何か:

randb = [] 
for i in range(0,5): 
    randb.append(randint(1,132)) 

そしてその後、私はHTML部分にallbで検索した書籍データベースにそれらの生成絡み数。

私が心配しているのは、ユーザーが既にレビューしている本を手に入れることです。なぜなら、私はそのための条件を与えていないからです。

注:ユーザーが確認していないブックIDのみを取得します。

はさらに、私はそれをフィルタリングするために、次のことをやってみました:

books1 = reviews.objects.filter(name=username) 
allb = book.objects.all() 
randb = [] 
reviewed_books = books1.bookid /*I get error in this line: 'QuerySet' object has no attribute 'bookid'*/ 
count = 0 
for i in range(0,132): 
    if i not in reviewed_books 
     randb.append(randint(1,132)) 
     count = count + 1 
    if count == 5 
     break 

私はその行(上記のコードではコメント行)を動作させる方法がわかりません。私のコードを動作させるための提案といくつかのコードスニペットが必要です。

は、事前にありがとう:)

EDIT:(私はコロンを忘れてしまった ':' if文の後)

books1 = reviews.objects.filter(name=username) 
allb = book.objects.all() 
randb = [] 
reviewed_books = books1.bookid /*I get error in this line: 'QuerySet' object has no attribute 'bookid'*/ 
count = 0 
for i in range(0,132): 
    if i not in reviewed_books: 
     randb.append(randint(1,132)) 
     count = count + 1 
    if count == 5: 
     break 

答えて

0

あなたは除外し、その結果から、その後すべての書籍を見つけてみてくださいと可能性ユーザーによって既に審査された書籍:

book.objects.exclude(id__in=reviews.objects.filter(name=username).values_list('id', flat=True) 
関連する問題