首页 > 解决方案 > Django无法弄清楚如何使用外键

问题描述

class Project_types(models.Model):
    project_type = models.CharField(max_length=200)

    def __str__(self):
        return self.project_type

class Projects(models.Model):
    project_types = models.ForeignKey(Project_types, on_delete=models.CASCADE)
    project = models.CharField(max_length=200)

    def __str__(self):
        return self.project

当我尝试运行时,Project_types(project_type='games').item_set.all() 我收到一条错误消息,指出没有设置属性项。

标签: pythondjangosqlite

解决方案


class Project_types(models.Model):
    project_type = models.CharField(max_length=200)

    def __str__(self):
        return self.project_type

class Projects(models.Model):
    project_types = models.ForeignKey(Project_types, on_delete=models.CASCADE)
    project = models.CharField(max_length=200)

    def __str__(self):
        return self.project

首先,您的模型存在一些问题。

第一个型号名称不应该是复数形式

这里一个Projects(应该是Project)有一个project_type,一个Project_types(应该是ProjectType)有一个project。

要运行您想要的查询:

Project_types.filter(project_type='games').item_set.all()

正确的查询是:

Project_types.filter(project_type='games').projects_set.all()

使用项目而不是项目,

相关管理器基于模型名称(在这种情况下,项目变为 projects_set)

见这里https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/


推荐阅读