Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django with MySQL:OperationalError(1054,';where子句';&#中的“未知列';”在尝试查询多对多关系时出错_Python_Mysql_Django - Fatal编程技术网

Python Django with MySQL:OperationalError(1054,';where子句';&#中的“未知列';”在尝试查询多对多关系时出错

Python Django with MySQL:OperationalError(1054,';where子句';&#中的“未知列';”在尝试查询多对多关系时出错,python,mysql,django,Python,Mysql,Django,我意识到之前有很多问题的标题都很相似,但它们的背景不同。我还没有找到一个与Django和我的特殊情况有关的答案 我在Django的两个模型之间有一个多对多关系,如下所示: class User(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True) def __unicode__(self): return self.user.username

我意识到之前有很多问题的标题都很相似,但它们的背景不同。我还没有找到一个与Django和我的特殊情况有关的答案

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

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\u app\u userstakecourses.user\u id”列)

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

非常感谢您的帮助。

问题就在这里

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

[旧]

[现在]

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

问题就在这里

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

[旧]

[现在]


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

您正在为多对多字段使用中间表。您应该通过该中间表获得用户课程。一个简单的方法是像这样使用
related\u name

class UsersTakeCourses(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_courses')
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='courses_taken_by_users')
    mark = models.IntegerField()
current_user = User.objects.get(username=user_name)
current_user_courses_id = current_user.user_courses.all().values_list('course', flat=True)
current_user_courses = Course.objects.filter(id__in=current_user_courses_id)
当您在此表中管理
用户
课程
关系时,您不需要
课程
表中的
用户
。您可以获得这样的用户参加的课程

class UsersTakeCourses(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_courses')
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='courses_taken_by_users')
    mark = models.IntegerField()
current_user = User.objects.get(username=user_name)
current_user_courses_id = current_user.user_courses.all().values_list('course', flat=True)
current_user_courses = Course.objects.filter(id__in=current_user_courses_id)


您正在为许多字段使用中间表。您应该通过该中间表获得用户课程。一个简单的方法是像这样使用
related\u name

class UsersTakeCourses(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_courses')
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='courses_taken_by_users')
    mark = models.IntegerField()
current_user = User.objects.get(username=user_name)
current_user_courses_id = current_user.user_courses.all().values_list('course', flat=True)
current_user_courses = Course.objects.filter(id__in=current_user_courses_id)
当您在此表中管理
用户
课程
关系时,您不需要
课程
表中的
用户
。您可以获得这样的用户参加的课程

class UsersTakeCourses(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_courses')
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='courses_taken_by_users')
    mark = models.IntegerField()
current_user = User.objects.get(username=user_name)
current_user_courses_id = current_user.user_courses.all().values_list('course', flat=True)
current_user_courses = Course.objects.filter(id__in=current_user_courses_id)



最终解决了这个问题。这是因为我有一个不必要的用户表,它的唯一目的是与auth_用户表进行一对一的链接。我删除了这个,并将我的多对多更改为直接从auth_user表中获取用户名。

最终解决了这个问题。这是因为我有一个不必要的用户表,它的唯一目的是与auth_用户表进行一对一的链接。我删除了这个,并将我的多对多更改为直接从auth_user表中获取用户名。

感谢您的回复。我将行更改为您建议的行,现在出现以下错误:ValueError at/firstaid/my courses/testuser/无法查询“testuser”:必须是“User”实例。现在我得到以下错误:OperationalError at/firstaid/my courses/testuser/(1054,“where子句”中的未知列“FAProject\u app\u userstakecourses.User\id”)您是否忘记运行make migrations和migrate命令?检查您的表,确定列是否存在。在映射表中。感谢您的回复。我将行更改为您建议的行,现在出现以下错误:ValueError at/firstaid/my courses/testuser/无法查询“testuser”:必须是“User”实例。现在我得到以下错误:OperationalError at/firstaid/my courses/testuser/(1054,“where子句”中的未知列“FAProject\u app\u userstakecourses.User\id”)您是否忘记运行make migrations和migrate命令?检查您的表,确定列是否存在。在映射表中。我从您编写的第二行代码中得到此错误:AttributeError at/firstaid/my courses/testuser/“User”对象没有属性“User\u courses”,您需要如我所述更改您的模型并运行迁移。我确实更改了模型并运行了迁移。您的
身份验证用户\u模型是什么具有用户名和密码的标准身份验证用户。我从您编写的第二行代码中得到此错误:AttributeError at/firstaid/my courses/testuser/'user'对象没有属性'user\u courses',您需要更改我提到的模型并运行迁移。我确实更改了模型并运行了迁移。您的建议是什么
AUTH\u USER\u MODEL
?我认为它只是一个带有用户名和密码的标准AUTH用户。很好,你找到了解决方案。很好,你找到了解决方案。