我意识到以前有很多标题相似的问题,但是它们的背景不同。我找不到与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)
因为在多对多关系中,这将创建新的映射表,并且没有直接多对多字段。