加入多个特定的一对多行

时间:2017-04-13 14:29:02

标签: django django-models

我必须从表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)进行查询?

1 个答案:

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

如果我误解了这个问题,请告诉我。

干杯。

相关问题