【问题标题】:How to properly access data from the django database?如何正确访问 django 数据库中的数据?
【发布时间】:2017-09-24 04:44:40
【问题描述】:

我一直在尝试生成一个用户未评论的图书列表,即他/她尚未为其撰写评论的图书。以下是我的 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

我不知道如何使该行(上面代码中的注释行)工作。需要建议和一些代码 sn-p 才能使我的代码正常工作。

提前谢谢你:)

编辑:(我忘记了 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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2017-10-02
      • 2020-02-26
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多