如何正确访问django数据库中的数据?

时间:2017-04-26 16:38:57

标签: python django django-models sqlite web-frameworks

我一直在尝试生成未经用户审核的图书清单,即他/她尚未为其撰写评论的图书。以下是 models.py

中的重要细节
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

所以,我一直在尝试首先获得用户已经审阅过的书籍:

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

为了获得这些书的数据库,我正在做以下事情:

allb = book.objects.all()

最初,我只是在range(1,132)中随机生成了5个数字并将它们存储在数组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

我不知道如何使该行(上述代码中的注释行)有效。需要建议和一些代码片段才能使我的代码正常工作。

提前谢谢你:)

编辑:(我忘了冒号':'在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

1 个答案:

答案 0 :(得分:0)

您可以尝试查找所有图书,然后从该结果中排除已经过用户审核的图书:

book.objects.exclude(id__in=reviews.objects.filter(name=username).values_list('id', flat=True)