Django - 根据外键过滤对象但有多种选择?
Django - Filter objects based on their ForeignKey but with multiple choices?
我正在开发一个应用程序,其中每个 User
都与他或她所说的语言列表相关联。该应用程序是关于书籍的,每个 Book
都有一个语言字段,表示该书所使用的语言。
我正在尝试获取所有以用户语言s 编写的书籍。因此,如果用户说英语 AND 西班牙语,我想检索所有用英语 AND 西班牙语写的书。
我的代码:
users/models.py:
class User(AbstractUser):
languages = models.ManyToManyField(Language)
books/models.py:
class Book(models.Model):
language = models.ForeignKey(Language)
books/views.py:这段代码实际上不起作用,但我发布它是为了传达我想要实现的目标:
class BooksView(APIView):
def get(self, request):
books = Book.objects.filter(language=request.user.languages)
return books
而不是 Book.objects.filter(language=request.user.languages)
,我怎样才能根据 ONE 语言而不是 MULTIPLE 过滤书籍语言?
要使用多个值进行过滤,您应该使用 __in
过滤器 - 它会在可迭代对象中查找特定查询,因此在您的情况下它看起来像这样
class BooksView(APIView):
def get(self, request):
books = Book.objects.filter(language__in=request.user.languages.all())
return books
顺便说一句,从逻辑上讲,“用英语和西班牙语写的书”这句话意味着特定的书必须用两个版本来写这个假设
我正在开发一个应用程序,其中每个 User
都与他或她所说的语言列表相关联。该应用程序是关于书籍的,每个 Book
都有一个语言字段,表示该书所使用的语言。
我正在尝试获取所有以用户语言s 编写的书籍。因此,如果用户说英语 AND 西班牙语,我想检索所有用英语 AND 西班牙语写的书。
我的代码:
users/models.py:
class User(AbstractUser):
languages = models.ManyToManyField(Language)
books/models.py:
class Book(models.Model):
language = models.ForeignKey(Language)
books/views.py:这段代码实际上不起作用,但我发布它是为了传达我想要实现的目标:
class BooksView(APIView):
def get(self, request):
books = Book.objects.filter(language=request.user.languages)
return books
而不是 Book.objects.filter(language=request.user.languages)
,我怎样才能根据 ONE 语言而不是 MULTIPLE 过滤书籍语言?
要使用多个值进行过滤,您应该使用 __in
过滤器 - 它会在可迭代对象中查找特定查询,因此在您的情况下它看起来像这样
class BooksView(APIView):
def get(self, request):
books = Book.objects.filter(language__in=request.user.languages.all())
return books
顺便说一句,从逻辑上讲,“用英语和西班牙语写的书”这句话意味着特定的书必须用两个版本来写这个假设