如何在django中过滤具有多对多关系的对象

时间:2017-04-12 21:32:26

标签: python django database

我是Django的新手,我正试图发现很多关系。

我有一个与默认用户模型有多对多关系的单词模型:

from django.db import models
from django.contrib.auth.models import User

class Word(models.Model):
    definition = models.CharField(max_length=350)
    turkish = models.CharField(max_length=50)
    english = models.CharField(max_length=50)
    users = models.ManyToManyField(User)

    def __str__(self):
        return self.english

    def summary(self):
        return self.definition[:50] + "..."

我有一个属于两个用户的示例单词对象,我只希望这两个用户在他们的feedpage上看到这个单词对象。我该如何更正下面的视图功能?

from django.shortcuts import render
from django.contrib.auth.models import User

@login_required
def home(request):
    user = request.user 
    small = user.username.title()
    words = Word.objects.filter(??????) #order_by('-english')
    return render(request, 'intro.html', {'words': words, 'small' : small})

基本上,我想检查单词对象的用户列表是否包含authourized用户,如果包含,则该单词将从数据库中获取。我该如何编码?

1 个答案:

答案 0 :(得分:4)

我认为你应该能够做到

words = Word.objects.filter(users=user)

要检查多个用户,您可以执行

之类的操作
words = Word.objects.filter(users__in=[user1,user2])

请查看docs示例。