我必须从表Type1连接一行,并从表Type2中连接两行。有数据库的示例模型:
class Type1(models.Model):
name = models.CharField(max_length=300)
class Type2(models.Model):
foreign = models.ForeignKey(Type1)
name = models.CharField(max_length=50)
value = models.IntegerField()
在SQL中,查询如下所示:
SELECT A.name, B.value, C.value
FROM Type1 A, Type2 B, Type2 C
WHERE B.foreign = C.foreign = A.id
AND B.name = _VAR1_ AND C.name = _VAR2_
如何使用Django方法(而不是原始SQL)进行查询?
答案 0 :(得分:0)
不确定我是否正确理解您的问题,并且知道很少的SQL来理解SQL代码。
解释1是您想要OR部分的反向关系查询和Q对象。查看跨越关系的'查找和'与Q对象的复杂查找'在this页面。
实施例
Type1.objects.filter(Q(type2__name = '_VAR1_' | type2__name = '_VAR2_'))
返回模型Type1的所有行,这些行具有关联的Type2行,其值为 VAR1 或 VAR2 。
解释2:你想要定义关系。 嗯,这更容易。您有一个Type1行,并希望将其他两行与此关联。 查询Type1行并将其保存到变量。
t1 = Type1.object.get(id = X)
然后使用外键中的t1对象创建type2对象:
t2 = Type2(foreign = t1, name = 'whatever', value = 'value')
t2.save()
和其他对象相同
t3 = Type2(foreign = t1, name = 'whatever2', value = 'value2')
t3.save()
如果我误解了这个问题,请告诉我。
干杯。