我有一句pythonDjango语言c_message = models.Courseinfo.objects.filter(Course__course_name__contains=value) 想要用django实现对一个表里的外键的模糊查询,但是由于外键不能被外键直接模糊查询所以在前面加上了Course__想要实现跨表的 对外键的模糊查询但是他还是会报错Cannot resolve keyword 'Course' into field. Choices are: course_file, course_info, course_ltime, course_name, course_name_id, course_picture, course_video, id
时间: 2023-11-28 19:48:17 浏览: 85
你可以尝试使用双下划线来跨表查询外键所在的表的字段,例如:
```python
c_message = models.Courseinfo.objects.filter(course__course_name__contains=value)
```
假设 `Courseinfo` 模型中的外键字段为 `course`,并且 `Course` 模型中有一个名为 `course_name` 的字段,则使用 `course__course_name` 来进行跨表查询。注意,这里的 `course` 应该是外键字段 `course` 的小写形式。
如果仍然出现类似的错误,可能是因为未正确设置外键关系。你可以在 `Courseinfo` 模型中的外键字段上添加 `related_name` 参数,以便在查询时更容易引用外键所在的模型,例如:
```python
class Courseinfo(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='courseinfo')
# ...
```
这样,你就可以使用 `course__course_name` 或者 `courseinfo__course_name` 来进行跨表查询了。
相关问题
SELECT SUM(ISNULL(COU.CoursePrice, 0)) AS aa FROM hrflagwxsp.dbo.CourseInfo COU WITH(NOLOCK) JOIN dbo.OrderListInfo ORD ON ORD.CourseInfoId=COU.CourseId WHERE COU.IsDelete=0 AND ORD.IsDelete=0 AND ORD.PayTime<>'1900-01-01 00:00:00.000'
这是一个 SQL Server 查询语句,它使用 SUM() 函数在 hrflagwxsp.dbo.CourseInfo 和 dbo.OrderListInfo 表中计算课程价格的总和。查询语句中的 ISNULL() 函数用于将 NULL 值转换为零,以便在计算总和时不会出现 NULL 值。查询语句中的 JOIN 子句用于将 hrflagwxsp.dbo.CourseInfo 表和 dbo.OrderListInfo 表连接起来,以便获取课程信息和订单信息。WHERE 子句用于过滤掉已删除的课程和订单,并且筛选支付时间不等于 '1900-01-01 00:00:00.000' 的订单。最后,查询语句使用 AS 关键字将计算出的总和命名为 aa。
string strSql; string condition = ""; DataAccess data = new DataAccess(); DataSet ds; if (txtCid.Text != "") { condition += "and Cid='" + txtCid.Text + "'"; } if (txtCname.Text != "") { condition += "and Cname='" + txtCname.Text + "'"; } strSql = "select Cid as 课程编号,Cname as 课程名称,Credit as 学分 from Courseinfo where 1=1" + condition; data.dataCon(); ds = data.getDataSet(strSql); dgvInfo.DataSource = ds.Tables[0];注释每一行代码
```
// 定义一个字符串变量
string strSql;
// 定义一个字符串变量,用于存储查询条件
string condition = "";
// 实例化一个 DataAccess 对象
DataAccess data = new DataAccess();
// 定义一个 DataSet 对象
DataSet ds;
// 判断文本框 txtCid.Text 是否为空,如果不为空,则添加一个查询条件
if (txtCid.Text != "")
{
condition += "and Cid='" + txtCid.Text + "'";
}
// 判断文本框 txtCname.Text 是否为空,如果不为空,则添加一个查询条件
if (txtCname.Text != "")
{
condition += "and Cname='" + txtCname.Text + "'";
}
// 构造查询语句,将查询条件添加到 where 子句中
strSql = "select Cid as 课程编号,Cname as 课程名称,Credit as 学分 from Courseinfo where 1=1" + condition;
// 打开数据库连接
data.dataCon();
// 执行查询语句,将结果保存到 DataSet 对象中
ds = data.getDataSet(strSql);
// 将 DataSet 对象中的第一个表绑定到 DataGridView 控件中显示
dgvInfo.DataSource = ds.Tables[0];
```
该段代码主要实现了从 Courseinfo 表中查询课程编号、课程名称、学分等信息,并将查询结果显示在 DataGridView 控件中。根据用户的输入,将文本框 txtCid 和 txtCname 中的值作为查询条件添加到查询语句中。最后执行查询语句,并将查询结果绑定到 DataGridView 控件中。
阅读全文