使用Django中第二级相关字段的PK保存模型

时间:2014-06-30 10:15:59

标签: django django-models

我有以下型号:

class A(models.Model):
    pass  # omitted for shortness

class B(models.Model):
    pass

class AB(models.Model):
    prop_a = models.ForeignKey('A')
    prop_b = models.ForeignKey('B')

class X(models.Model):
    prop_ab = models.ForeignKey('AB')

我想保存实例X的模型,但不执行ab = AB.objects.get(prop_a=1, prop_b=2)然后x.prop_ab = ab

我想要这样的事情(假设AB AB中的所有正确条目已经存在):

x = X()
x.prop_ab__prop_a__id = 1
x.prop_ab__prop_b__id = 2
x.save()

这样的事情可能吗? (上面的语法不起作用,我试过了)

1 个答案:

答案 0 :(得分:0)

假设ABAB中的所有相应条目已存在

你可以这样做:

x = X()
x.prop_ab.prop_a_id = 1
x.prop_ab.prop_b_id = 2
x.save()

我需要在foreach循环中对save()模型执行一堆X,因此我还需要在该foreach中获取相应的AB条目。我希望通过消除get 上的AB来减少查询次数

for x in X.objects.select_related('prop_ab'):
    x.prop_ab.prop_a_id = 1
    x.prop_ab.prop_b_id = 2
    x.save()