我对 Django 比较陌生,并且在通过表关系方面遇到了一些麻烦。我查看了文档,找不到在没有大量数据库调用的情况下更新集合的好方法。
class Business(models.Model):
customers = models.ManyToManyField('Customer', through='BusinessRelationship')
class Customer(models.Model):
vendors = self.business_set.all()
class BusinessRelationship(models.Model):
business = models.ForeignKey('Company', blank=False)
customer = models.ForeignKey('Customer', blank=False)
value = models.IntegerField(null=True)
假设我的数据库中有一个经常更换供应商的 figdety 客户。我得到了他的供应商的当前列表,我想更新 business_set 而不反复要求数据库更新或保存每个项目。现在我有类似的东西:
current_relationships = [\list of BusinessRelationship objects, some of which are saved, some are new\]
我想一次把它保存给客户。理想情况下,我可以找到一种方法来执行下面的 bulk_save_or_create 之类的操作,这样可以避免不必要的数据库调用:
current_vendors = [\list of unique vendor IDs, ints not objects\]
my_customer.bulk_save_or_create(Business, current_vendors)
我知道这是一个比平时更广泛的问题,并且“最佳”方面可能有些主观,但肯定必须有一种标准/公认的 djangoey 方式来做这样的事情,而我的 google-foo 和文档阅读还没有来识别它。
编辑:阿努普,感谢您的建议。实际上只是查看 Queryset#update_or_create 方法并意识到我本质上想要该函数的批量版本。