python - 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_set)
见这里https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/
推荐阅读
- active-directory - 同步 liferay 和 AD 的通讯组
- git - 从 Go 'exec()' 调用 'git shortlog' 有什么问题?
- angular - 通过Angular中的箭头键将焦点设置在下拉自动完成选项上
- android - java.lang.StackOverflowError:android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:7531) 处的堆栈大小为 8MB
- oracle-apex - Oracle APEX:服务器 404 - 未加载 jQuery 或图像
- android - ARCore – 添加对不受支持的设备的支持
- java - 套接字没有响应
- c++ - 已经填充 QSet 作为可选参数
- angular - 清除 Angular 2 中的缓存
- selenium - 如何根据以下 html 定位复选框 - Selenium WebDriver 和 C#