我需要使用
bulk_create
在
django-mptt
django.db.utils文件.IntegrityError:列“lft”中的null值违反了not null约束
详细信息:失败行包含(2,Magic,null,null,null,null,null,null,1)。
lft
,
rght
,和
tree_id
?
型号.py:
from mptt.models import MPTTModel, TreeForeignKey
class Category(MPTTModel):
parent = TreeForeignKey('self', on_delete=models.CASCADE, blank=True,
null=True, related_name='children',
)
name = models.CharField(max_length=255)
tcgplayer_category = models.ForeignKey('tcgplayer.TcgCategory', on_delete=models.PROTECT,
blank=True, null=True)
class Meta:
unique_together = (
('parent', 'name'),
)
def __str__(self):
return self.name
class TcgCategory(models.Model):
id = models.PositiveSmallIntegerField(primary_key=True)
name = models.CharField(max_length=255)
class CategoryGroup(models.Model):
id = models.IntegerField(primary_key=True)
category = models.ForeignKey('tcgplayer.TcgCategory', on_delete=models.CASCADE)
[{
"model": "tcgplayer.tcgcategory",
"pk": 1,
"fields": {
"name": "Magic",
}
}, {
"model": "tcgplayer.categorygroup",
"pk": 1,
"fields": {
"category": 1,
"name": "10th Edition",
}
}, {
"model": "tcgplayer.categorygroup",
"pk": 2,
"fields": {
"category": 1,
"name": "7th Edition",
}
}]
任务.py:
def convert_categories(category_ids):
root_categories = TcgCategory.objects.filter(id__in=category_ids)
category_parents = Category.objects.bulk_create([ # error is thrown here
Category(
tcgplayer_category_id=model['id'],
name=model['name'],
)
for model in root_categories.values('id', 'name')
])
for parent in category_parents:
category_groups = CategoryGroup.objects.filter(category_id=parent.tcgplayer_category_id)
category_models.extend([
Category(
tcgplayer_category_id=model['id'],
name=model['name'],
parent=parent,
)
for model in category_groups.values('id', 'name')
])
Category.objects.bulk_create(category_models)