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()