过滤ManyToManyField

时间:2015-08-23 17:43:50

标签: django django-models django-queryset

虽然我遵循了文档https://docs.djangoproject.com/en/dev/topics/db/queries/#field-lookups,但我无法进行简单的查询。

models.py

class Course(models.Model):
    name = models.CharField(max_length=30, unique=True, blank=False)    
    code = models.CharField(max_length=10, unique=True, blank=False)

    def __str__(self):
        return self.name

class User(models.Model):
    ...
    courses = models.ManyToManyField(Course)

我注册了一个名为“a”的用户和一个名为“mathématique”的课程,但我在shell中得到了这个:

>>> User.objects.all()
[<User: a>]

>>> User.objects.filter(courses__name__contains='mathématique')
[]

>>> User.objects.filter(courses__name__in='mathématique')
[]

它总是返回一个空列表,我无法理解为什么。当我看到管理时,我可以看到User有一个“数学”课程。

修改

forms.py

from user.models import User, Course

class UserForm(forms.ModelForm):
    cours_choices = forms.ModelChoiceField(queryset=Course.objects.all())
    class Meta:
        model = Offer
        fields = ('cours_choices', 'faculty', 'description')

EDIT2

好的,问题解决了。以上查询工作正常。我不知道为什么它现在正在运作,但我怀疑罪魁祸首可能是对“cours”这个名字的混淆,这个名字用于课堂和田野

1 个答案:

答案 0 :(得分:1)

如果从类User中删除“course = models.ManyToManyField(Course)”并将其移至课程课程,如下所示“course = models.ManyToManyField(User)”并执行以下查询:

User.objects.filter(course__name__contains = 'mathématique')

请注意我已将(课程)更改为(用户)

相关问题