虽然我遵循了文档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”这个名字的混淆,这个名字用于课堂和田野
答案 0 :(得分:1)
如果从类User中删除“course = models.ManyToManyField(Course)”并将其移至课程课程,如下所示“course = models.ManyToManyField(User)”并执行以下查询:
User.objects.filter(course__name__contains = 'mathématique')
请注意我已将(课程)更改为(用户)