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()我得到一个错误,说没有属性项集。

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变为projects_set)

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

运行以下命令创建的实例上不存在.item_set属性:

Project_types(project_type='games')

在我看来,您试图获得'games'类型的所有Projects

要做到这一点,您必须像这样使用Projects类的QuerySet:
Projects.objects.filter(project_types__project_type='games').all()

另外,一个建议:尝试使用单数CamelCase来命名你所有的模型类,这样它们会更容易理解。在您的示例中,Project_types应该是ProjectType,而Projects应该是Project

Project_types(project_type='games')实际上不返回任何对象。这就是为什么会出现属性错误。您需要添加过滤器或使用get。如下所示:

Project_types.objects.get(project_type='games').item_set.all()

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

相关内容

最新更新