Django массовое добавление многий ко многим

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2023

Есть 2 модели

class Image(models.Model):
    image_path = models.CharField("image path", max_length=300, unique=True)
    image_name = models.CharField("image name", max_length=30)
    tags = models.ManyToManyField("Tag", verbose_name=("tags"))


class Tag(models.Model):
    tag = models.CharField("tag", max_length=20, unique=True)

Обе заполняются через bulk_create. Надо массово связать Image и Tag. Что-то типа этого:

for tag in Tag.objects.all():
        Image.objects.filter(image_path__contains=os.sep + tag.tag + os.sep).update(tags=tag)

При этом если изображение уже имеет связь с тегом повторно её создавать не надо. Как это сделать?

Ответы

▲ 0Принят

Сам спросил сам ответил =)

for tag in Tag.objects.all():
    tag.image_set.add(*Image.objects.filter(image_path__contains=os.sep + tag.tag + os.sep))

Дубли при этом не создаются.