Python Django,queryset过滤器多个字段

Python Django,queryset过滤器多个字段,python,django,filter,django-orm,Python,Django,Filter,Django Orm,我有下面两种型号。所以我想得到一门课程的所有模块。正如你所看到的,我已经在上那门课了。所以我只需要从中获取模块。我读过关于过滤很多领域的文章,但还是没能成功。我知道这可能太简单了,但解决不了 models.py class Course(models.Model): name = models.CharField(max_length=100) modules = models.ManyToManyField('Module', blank=True) class Module

我有下面两种型号。所以我想得到一门课程的所有模块。正如你所看到的,我已经在上那门课了。所以我只需要从中获取模块。我读过关于过滤很多领域的文章,但还是没能成功。我知道这可能太简单了,但解决不了

models.py

class Course(models.Model):
    name = models.CharField(max_length=100)
    modules = models.ManyToManyField('Module', blank=True)

class Module(models.Model):
    code = models.CharField(max_length=10, unique=True)
    name = models.CharField(max_length=65)
    year = models.IntegerField()
view.py

def ajax_get_modules(request, course):
    current_course = Course.objects.get(pk=course).pk
    modules = Module.objects.filter(...........)
    if request.is_ajax():
        data = serializers.serialize('json', modules)
        return HttpResponse(data, content_type="application/javascript")
尝试:


课程模型上有一个相关字段,它是M2M to模块,因此允许您访问与课程直接关联的模块列表

完成课程后,只需获取所有模块,如下所示:

course = Course.objects.get(pk=course_id)
course_modules = course.modules.all()
我总是建议用try/except来包装查询课程的第一行——这是因为如果找不到结果,模型管理器的get方法会抛出异常

可以这样做:

try:
    course = Course.objects.get(pk=course_id)
except Course.DoesNotExist:
    pass  # Handle this exception

我不知道为什么这是公认的答案——惯用的解决方案是使用反向关系cf
course = Course.objects.get(pk=course_id)
course_modules = course.modules.all()
try:
    course = Course.objects.get(pk=course_id)
except Course.DoesNotExist:
    pass  # Handle this exception