Рассчитайте некоторое значение на основе одной из моделей django и обновите сразу 700 тыс. Объектов - PullRequest
0 голосов
/ 12 февраля 2020

В моем приложении django есть модель:

class Entry(BaseModel):
    event_name = models.CharField(_('Event name'), max_length=256, null=True, blank=True)
    slug = models.SlugField(null=True, blank=True, max_length=512)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = self.get_slug()
         super().save(*args, **kwargs)

    def get_slug(self):
        add = 1
        slug = None
        if not self.slug and self.event_name:
            init_slug = slugify.slugify(self.event_name)
            slug_available = Entry.objects.filter(slug=init_slug).count() == 0

            if slug_available:
                slug = init_slug
            else:
                while not slug_available:
                    check_slug = '{}-{}'.format(init_slug, add)
                    slug_available = Entry.objects.filter(slug=check_slug).count() == 0
                    if slug_available:
                        slug = check_slug
                    else:
                        add += 1
            return slug

    def make_slug(self):
        if not self.slug:
            slug = self.get_slug()
            self.slug = slug
            self.save()

Поле слагов по умолчанию пусто, и теперь я хочу обновить 700k + строк с пустым слагом с новым значением.

Я делал это, запрашивая базу данных: qs = Entry.objects.filter (slug__isnull = True), а затем обновлял элементы в l oop один за другим:

for entry in qs:
    entry.make_slug()

, но я смотрю для более эффективного способа сделать это. Вы знаете какое-нибудь простое решение?

...