假设我有以下两个Django模型:
class MyModelA(models.Model):
my_int = models.IntegerField()
class MyModelB(models.Model):
my_int = models.IntegerField()
my_a = models.ForeignKey(MyModelA, related_name="MyModelB_a")
我可以用两种方式创建MyModelA
的实例:
# First technique:
>>> a = MyModelA.objects.create(my_int=5)
# Second technique:
>>> a = MyModelA(my_int=5)
>>> a.save()
如果我知道我不需要在实例化和保存之间更改a
,我会使用第一种技术(减少代码行数)。如果我知道a
将在实例化和保存之间改变,我通常使用上面显示的第二种技术(以减少数据库访问)。
类似地,当我想通过反向外键关系从MyModelA
中的方法创建MyModelB
的实例时,我执行以下操作:
# First technique:
>>> b = self.MyModelB_a.create(my_int=6)
但是我不知道如何使用第二种技术通过反向外键关系创建MyModelB
的实例。怎么做呢?调用什么函数?我想使用related_name MyModelB_a
创建一个实例,而不将其保存到DB,直到我显式调用save()
# Second technique:
>>> b = a.MyModelB_a.WHAT-GOES-HERE(my_int=6)
>>> b.save()
如果我明白你的意思…你想要a.MyModelB_a.new(my_int=6)
之类的东西。比如rails中的.build
!
但如果你只是不想导入MyModelB
的原因,你可以使用一个工作,如果你是OK的,
可以使用a.MyModelB_a.model(my_int=6, my_a=a)
或者您可以重写Manager类来实现您自己的方法。我没有尝试覆盖RelatedManager
之前,但它似乎是允许在django的use_for_related_fields
。