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

2024-10-01 09:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试生成一个没有被用户审阅的图书列表,即他/她没有为其撰写审阅的图书。以下是我的型号.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

Tags: 用户nameinifobjectsmodelscountlength
1条回答
网友
1楼 · 发布于 2024-10-01 09:32:53

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

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

相关问题 更多 >