我意识到以前有很多标题相似的问题,但是它们的背景不同。我找不到与Django和我的特定情况有关的答案。

我在Django中的2个模型之间有一个多对多关系,如下所示:

class User(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True)

    def __unicode__(self):
        return self.user.username

class Course(models.Model):
    users = models.ManyToManyField(User, through='UsersTakeCourses')
    title = models.CharField(max_length = 128)
    description = models.CharField(max_length = 1024)

    def __str__(self):
        return self.title

class UsersTakeCourses(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    mark = models.IntegerField()


在Django的views.py中,给定用户名,我想查询数据库以便检索特定用户正在学习的所有课程。这是我的查看方法:

def my_courses(request, user_name):
    current_user = User.objects.get(username=user_name)
    current_user_courses = Course.objects.filter(users__pk=current_user.pk)

    context_dict = {'user_courses': current_user_courses}
    return render(request, 'FAProject_app/my_courses.html', context_dict)


但是,当我运行服务器并尝试加载该视图所涉及的页面时,出现以下错误消息:


  / firstaid / my-courses / testuser /(1054,“未知
  “ where子句”中的“ FAProject_app_userstakecourses.user_id”列


我意识到这可能是mySQL查询中的语法错误,但是我不知道在Django构建查询本身时会发生这种错误。

任何帮助深表感谢。

最佳答案

问题在这里

current_user_courses = Course.objects.filter(users__pk=current_user.pk)


试试吧

[旧]

current_user_courses = Course.objects.filter(users__in=[current_user])


[现在]

current_user_courses = Course.objects.filter(users__user=current_user)


因为在多对多关系中,这将创建新的映射表,并且没有直接多对多字段。

10-08 03:11
查看更多