【发布时间】:2014-08-28 06:13:09
【问题描述】:
我有两个模型:模式和类别。
class Pattern(models.Model):
name = models.CharField(max_length=255, default=u'')
categories = models.ManyToManyField(Category, related_name='patterns')
def __unicode__(self):
return u"{}".format(self.name)
class Category(models.Model):
name = models.CharField(max_length=255, default=u'')
def __unicode__(self):
return u"{}".format(self.name)
我需要检查valid 中的每个模式是否已经存在,并正确修改它的manytomany <some_pattern>.categories 字段。
现在我这样做如下(valid 是模式列表,categories 是某些类别的查询集):
for pattern in valid:
obj, created = Pattern.objects.get_or_create(name=pattern)
if created:
obj.categories = categories
else:
obj.categories.add(*categories)
如何使用尽可能少的 sql 查询来做同样的事情?
【问题讨论】:
-
您的
name在 Pattern 表中是唯一的吗? -
解决方案的关键是使用 bulk_create