对于此(高度简化)的Django模型设置:
class A(models.Model)
class B(models.Model)
a = models.ForeignKey(A, null=True, blank=True)
class C(models.Model)
b = models.ForeignKey(B, null=True, blank=True)
我想确保对于C上的查询来说,没有任何不是[a1,a2]的相关对象都属于查询。
类似的东西:
qs = C.objects.exclude(b__a__NOT_in=[a1, a2]).
我要搜索的是不是
qs = C.objects.filter(b__a__in=[a1, a2])
因为我的外键是可为空的,所以我也想获取途中任何fks为空的情况。
解决这个问题的最优雅的方法是什么?
谢谢!
答案 0 :(得分:2)
如果我的理解正确,那么您想要C个实例,其中const cypress = require('cypress')
const marge = require('mochawesome-report-generator')
const { merge } = require('mochawesome-merge')
const currRunTimestamp = getTimeStamp();
const mergedReport = {
reportDir: 'mochawesome-report',
}
const finalReport = {
reportDir: 'reports',
}
cypress.run({
reporter: 'mochawesome',
reporterOptions: {
reportDir: 'mochawesome-report',
overwrite: false,
html: true,
json: true
}
}).then(
() => {
generateReport()
},
error => {
generateReport()
console.error(error)
process.exit(1)
}
)
function generateReport(options) {
return merge(mergedReport).then(report => marge.create(report, finalReport))
}
为null或b
为null或b__a
是b__a
之一。此处可能的解决方案是use the models.Q
object建立一个(a1, a2)
查询,即:
or
from django.db.models import Q
query = Q(b__a__in=[a1, a2]) | Q(b__a__isnull=True) | Q(b__isnull=True)
qs = C.objects.filter(query)
这将产生完全相同的SQL查询,但是更加冗长...